按字符串长度排序CMap密钥

时间:2010-03-18 03:34:23

标签: c++ mfc stl

以前,我使用STL map来执行上述任务。

struct ltstr
{
    bool operator()(std::string s1, std::string s2) const
    {
      const int l1 = s1.length();
      const int l2 = s2.length();
      if (l1 == l2) {
          // In alphabetical order.
          return s1.compare(s2) < 0;
      }
      // From longest length to shortest length.
      return l1 > l2;
    }
};
std::map<std::string, int, ltstr> m;

如何使用CMap执行相同的任务?

// How to make key sorted by string length?
CMap<CString, LPCTSTR, int, int> m;

2 个答案:

答案 0 :(得分:4)

你做不到。来自the MSDN documentation for CMap

  

您可能认为此迭代按键值顺序;它不是。检索到的元素序列是不确定的。

答案 1 :(得分:1)

地图中的序列由散列值决定,适用于所有意图和目的...... random

相反,您可能希望保留/生成指向键的指针的排序列表或类似的东西。