我正在做一个练习,我正在遍历一个单词(“胡椒”),我正在计算每个角色重复的次数,我希望输出为:
p: 3
e: 2
r: 1
(按出现顺序排序)
我正在使用地图:
void foo(string word)
{
map<char, int> m;
for(int i = 0; i < word.length(); i++)
m[word[i]]++;
map<char, int>::iterator myIt;
for(myIt = m.begin(); myIt != m.end(); myIt++)
cout << myIt->first << ": " << myIt->second << endl;
}
这里的问题是输出的顺序:
e: 2
p: 3
r: 1
我希望它像我之前提到的那样。有没有办法修改地图对它存储的值进行排序的方式?
干杯!!!
答案 0 :(得分:2)
我只用MS VC ++ 2010测试了下面的代码。
void foo( const std::string &word )
{
auto order = [&]( char x, char y )
{
return ( word.find( x ) < word.find( y ) );
};
std::map<char, int, decltype( order )> m( order );
for ( char c : word ) ++m[c];
for ( const auto &p : m ) std::cout << p.first << ": " << p.second << std::endl;
std::cout << std::endl;
}