Multimap不排序

时间:2011-03-02 13:34:31

标签: c++ stl map multimap

我有这个多图,用于将字符串的汉明距离映射到相应的字符串。

由于两个字符串的汉明距离可能相同,我希望它们按升序排序。但是,当我打印出来时,它没有排序。 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;
            }

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

较少的模板功能不是必需的,因为它是默认值。尝试在不使用以下情况下声明检查:

typedef multimap<unsigned, string> Check;

编辑:执行此操作的最佳方法是生成哈希键作为* key_type *,而值类型可以是std::pair<unsigned, string>

答案 2 :(得分:0)

使用std::multimap无法做到这一点,因为在比较密钥时,不知道它们代表哪个值。

答案 3 :(得分:0)

multimap仅按其键(长度)排序,而不是按值(字符串)排序。在这种情况下,我怀疑你最好的方法是std::map<unsigned, std::set<std::string> >。您也可以使用std::set<std::pair<unsigned, std::string> >,但搜索会要求您构建虚拟pair以进行搜索。