C++ 多重映射不排序

C++ 多重映射不排序,c++,stl,map,multimap,C++,Stl,Map,Multimap,我创建了这个多重映射,将字符串的汉明距离映射到对应的字符串 因为两个字符串的汉明距离可能相同,所以我希望它们按升序排序。但是,当我打印出来时,它没有被排序。hamdistArray被声明为无符号类型 typedef multimap<unsigned, string, less<unsigned> > Check; Check pairs; pairs.insert(Check::value_type(hamdistAr

我创建了这个多重映射,将字符串的汉明距离映射到对应的字符串

因为两个字符串的汉明距离可能相同,所以我希望它们按升序排序。但是,当我打印出来时,它没有被排序。hamdistArray被声明为无符号类型

typedef multimap<unsigned, string, less<unsigned> > Check;
            Check pairs; 

            pairs.insert(Check::value_type(hamdistArray[j], d.sortedWordDatabase[j]));

            for(Check::const_iterator iter = pairs.begin(); iter != pairs.end(); ++iter)
            {
                cout << iter->first << '\t' << iter->second<< endl;
            }
typedef多重映射检查;
检查配对;
insert(Check::value_type(hamdistArray[j],d.sortedWordDatabase[j]);
对于(Check::const_iterator iter=pairs.begin();iter!=pairs.end();++iter)
{

cout firstless template函数不是必需的,因为它是默认值。请尝试在不使用as的情况下声明Check:

typedef multimap<unsigned, string> Check;
typedef多重映射检查;

编辑:最好的方法是生成一个哈希键作为*key_type*,而不是值类型可以是
std::pair

多重映射中的元素按键排序(在本例中为无符号汉明距离)。具有相同键的元素不按值排序(在本例中为字符串),它们通常按插入顺序保存。

使用
std::multimap
,这是不可能的,因为在比较键时,不知道它们代表哪个值。

multimap
只按键(长度)排序,不按值(字符串)排序。在这种情况下,我怀疑您最好的方法是使用
std::map
。您也可以使用
std::set
,但搜索需要您构造虚拟
对来进行搜索。

Check
对于这种类型来说是一个愚蠢的名称。我看不出您发布的代码是一个测试用例,因为您只插入了一个值。@Tomalak Geret'kal The代码在for循环中,因此选择了“j”。选择检查是因为它根据字符串与数据库的汉明距离来更正字符串。然后请将该循环包含在测试用例中。
Check
是一个愚蠢的名称:该类型不更正任何内容;它是一个类型,而不是一个过程。它是一种数据存储类型的名称,而不是一个al变异数据的算法。@Tomalak Geret'kal:谢谢你的洞察力。我为这种类型选择的名称可能对你没有意义。我希望它不会妨碍你帮助我回答我的问题的能力。:)这将如何改变任何事情?尝试过,但没有改变任何事情。谢谢你指出这一点。我会怎么做rt汉明距离及其对应的字符串?我应该手动执行吗?使用set或multiset对无符号和字符串。multimap文档似乎支持这个答案: