比较器操作符,用于将对象存储在地图中

时间:2013-09-30 19:18:21

标签: c++ stl comparator stdmap

我有以下课程

class Person
{
  string name;
  string section;
};

比较器运算符的实现可以将其存储在映射中吗?

2 个答案:

答案 0 :(得分:3)

一种可能的实现方式是:

class Person
{
  string name;
  string section;
};

bool operator<(const Person& lhs, const Person& rhs) {
    return lhs.name < rhs.name;
}

这将按字典顺序按名称排序。其他订单可能会有所不同,具体取决于您的需求。你的问题有点不清楚,因为通常你需要两种类型的地图,一个键类型和一个值类型。仅对键类型进行比较,而不是对值类型进行比较。

答案 1 :(得分:3)

可能类似

#include <tuple> // for std::tie

struct ComparePersons
{
  bool operator()(const Person& lhs, const Person& rhs) const
  {
    return std::tie(lhs.name, lhs,section) < std::tie(rhs.name, rhs.section);
  }
};

使用name首先和section秒执行词典编辑而非比较。显然,这假设您有兴趣使用Person s作为地图的键。