2014-10-17 87 views
0

我有一个字符串类型的载体,它包含以下出现的次数:计数字符串中的矢量

tpNums contains:  2 15 38 43 50   5 14 16 29 53 

我试图把向量的内容和计算的各数的次数矢量出现在这种情况下,它们都只出现一次;以下代码:

std::map<std::string, std::size_t> results; 
    std::for_each(begin(tpNums), end(tpNums), [&](std::string const& s) 
    { 
     ++results[s]; 

    }); 

我的问题是,如何输出结果图的内容?

有没有更容易解决我的问题,或者这是唯一的方法?

编辑:

我已经试过这样:

std::map<std::string, std::size_t> results; 
    std::for_each(begin(tpNums), end(tpNums), [&](std::string const& s) 
    { 
     ++results[s]; 
     cout << results[s]; 

    }); 

OUTPUT:1112

我不认为我是输出正确的事情,我已经尝试了不同的方式,但他们要么秀错误或输出错误的东西

+0

显示你的'cout'相关代码? – billz 2014-10-17 23:17:11

+0

你在谈论哪个矢量?我在代码中的任何地方都看不到任何'std :: vector'。 – Oguk 2014-10-17 23:30:30

+0

tpNums是我从来没有显示过的矢量的地方 – 2014-10-17 23:37:44

回答

2

要转储地图的内容,您可以使用通常的map::cbegin/map::cend圈:

for (auto it = results.cbegin(); it != results.cend(); ++it) 
    std::cout << it->first << " => " << it->second << '\n'; 

,或者如@leemes提及,只是

for (auto& pair : results) 
    std::cout << pair.first << " => " << pair.second << '\n'; 

如果你已经预先C++编译器11,然后map::begin/map::end

for (std::map<string, size_t>::iterator it = result.begin(); it != result.end(); ++it) 
    std::cout << it->first << " => " << it->second << '\n'; 
+0

哦,好吧,这工作,但我不认为我的地图正在计算正确的事情,它显示这个 '=> 2' '2 15 38 43 50 => 1' '5 14 16 29 53 => 1' 我想让它计算每个单独的数字,但它正在计算一系列数字,是因为我在矢量中有多余的空格吗? – 2014-10-17 23:28:18

+0

“5 14 16 29”是一个字符串。不管有多少空间,它只是一个*长的字符串。如果你想用单个“数字序列”做些什么,你首先必须将字符串分解成你认为是一个实体的块(或者甚至可能将它们转换为数字)。 – Oguk 2014-10-17 23:33:29

+0

似乎tpNums包含4个字符串:''“,”2 15 38 43 50“,”“,”1 5 14 16 29 53“'。你需要先将它们分成单独的数字。请参阅http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c。 (为了简单起见,你可以首先使用'“”'作为分隔符将'tpNum'中的所有字符串连接成一个长字符串,然后将结果字符串拆分为一个向量,然后进行计数循环。) – AlexD 2014-10-17 23:33:43