在地图中自定义键的顺序

时间:2014-03-19 19:33:28

标签: c++ map

我正在做一个练习,我正在遍历一个单词(“胡椒”),我正在计算每个角色重复的次数,我希望输出为:

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

我希望它像我之前提到的那样。有没有办法修改地图对它存储的值进行排序的方式?

干杯!!!

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;
}