std :: map - 如何更改密钥排序?

bar*_*kmp 4 c++ sorting string dictionary stl

我有问题std::map.我用它来映射特定索引下的一些对列表:

map<string, list<pair<string, int> > > List;
Run Code Online (Sandbox Code Playgroud)

它用于Dijkstra算法.主要问题是map按string字母顺序对键进行排序,如下所示:

AAA, AA0, AA1, AAB, AC1 = AA0->AA1->AAA->AAB->AC1
Run Code Online (Sandbox Code Playgroud)

但我想以不同的方式对其进行排序:

AAA, AA0, AA1, AAB, AC1 = AAA->AAB->AA0->AA1->AC1
Run Code Online (Sandbox Code Playgroud)

这有什么解决方案吗?我读过关于制作自己的比较课程,但我不知道如何做到这一点.或许还有其他方法可以解决它?

jua*_*nza 9

您必须提供自己的比较函子,在实例化地图时必须将其作为第三个模板参数传递.例如:

struct Comp
{
  bool operator()(const std::string& lhs, const std::string& rhs) const
  {
    // implement your comparison logic here
  }
};
Run Code Online (Sandbox Code Playgroud)

这个类的实例是可调用的(因此是"functor"),带有两个字符串参数,并且应该在严格的弱排序逻辑中返回true或false .

然后使用仿函数类型实例化地图:

std::map<string, list<pair<string, int>>, Comp> List;
Run Code Online (Sandbox Code Playgroud)

现在,地图将在内部使用您的比较逻辑来定义其元素的顺序.

  • @ user2342783这是一个完全不同的问题.你应该在一个新问题中提出这个问题 (2认同)