Сортировать ключ CMap по длине строки - PullRequest
1 голос
/ 18 марта 2010

Ранее я использовал карту STL для выполнения упомянутой задачи.

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 ]

4 голосов
/ 18 марта 2010

Вы не можете. С документация MSDN для CMap:

Вы можете подумать, что эта итерация последовательна по значению ключа; это не. Последовательность найденных элементов не определена.

1 голос
/ 18 марта 2010

Последовательность на карте определяется значением хеширования и предназначена для всех целей и задач ... random .

Вместо этого вы можете захотеть сохранить / сгенерировать отсортированный список указателей на ключи или что-то в этом роде.

...