【问题标题】:Multimap not sorting多图未排序
【发布时间】:2011-03-02 13:34:30
【问题描述】:

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

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

【问题讨论】:

  • Check 是这种类型的愚蠢名称。
  • 我看不出您发布的代码是一个测试用例,因为您只插入一个值。
  • @Tomalak Geret'kal 代码在 for 循环中,因此是“j”。之所以选择 Check,是因为它根据其汉明距离与数据库的接近程度来纠正字符串。
  • 那么请在您的测试用例中包含循环。 Check 是一个愚蠢的名字:类型没有更正任何东西;它是一个类型,而不是一个过程。它是一种数据存储类型的名称,而不是变异数据的算法。
  • @Tomalak Geret'kal:感谢您的洞察力。我为这种类型选择的名称对您来说可能没有意义。我希望它不会妨碍您帮助我回答我的问题的能力。 :)

标签: c++ stl map multimap


【解决方案1】:

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

【讨论】:

  • 感谢您指出这一点。那么我将如何将汉明距离与其相应的字符串一起排序?我应该手动完成吗?
  • 使用无符号和字符串对的集合或多重集合。
  • 多地图文档似乎支持这个答案:cplusplus.com/reference/stl/multimap/insert
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    multimap 仅按其键(长度)排序,而不是按值(字符串)排序。在这种情况下,我怀疑您最好的方法是std::map&lt;unsigned, std::set&lt;std::string&gt; &gt;。你也可以使用std::set&lt;std::pair&lt;unsigned, std::string&gt; &gt;,但搜索需要你构造一个虚拟的pairs 来搜索。

    【讨论】:

      【解决方案4】:

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

      typedef multimap<unsigned, string> Check;
      

      已编辑:最好的方法是生成一个哈希键作为 *key_type* 而 value-type 可能是 std::pair&lt;unsigned, string&gt;

      【讨论】:

      • 这将如何改变任何事情?
      • 试过了,但没有任何改变。
      猜你喜欢
      • 2015-03-12
      • 1970-01-01
      • 2017-05-03
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      相关资源
      最近更新 更多