【问题标题】:Custom ordering of keys in map地图中键的自定义排序
【发布时间】:2014-03-19 19:33:27
【问题描述】:

我正在做一个练习,我正在遍历一个单词(“pepper”),我正在计算每个字符重复的次数,我希望输出是:

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

我希望它像我之前提到的那样。有什么办法可以修改地图对它存储的值的排序方式吗?

干杯!!!

【问题讨论】:

标签: c++ map


【解决方案1】:

我只用 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;
}

【讨论】:

  • 不错!我已经删除了我在下面的帖子,给出了非创造性的否定答案。
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 2012-04-07
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多