5

我构建了这个多映射来将字符串的汉明距离映射到其相应的字符串。

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

4 回答 4

5

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

于 2011-03-02T13:48:56.340 回答
0

less 模板函数不是必需的,因为它是默认的。尝试将 Check 声明为:

typedef multimap<unsigned, string> Check;

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

于 2011-03-02T13:43:46.760 回答
0

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

于 2011-03-02T13:49:36.877 回答
0

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

于 2011-03-02T14:26:38.273 回答