C++的set和get能否处理自定义类型

avatar
作者
猴君
阅读量:0

是的,C++ 的 setmap 容器可以处理自定义类型。为了使它们能够处理自定义类型,您需要提供适当的比较函数或比较对象,以便容器可以对元素进行排序和查找。

对于 set,您可以提供一个比较函数,该函数接受两个自定义类型的对象作为参数,并返回一个布尔值,表示它们是否相等。例如:

struct Person {     std::string name;     int age; };  bool comparePersons(const Person& p1, const Person& p2) {     return p1.name < p2.name; }  int main() {     std::set<Person, decltype(comparePersons)> people(comparePersons);     // ... } 

在这个例子中,我们定义了一个 Person 结构体,并提供了一个比较函数 comparePersons,用于比较两个 Person 对象。然后,我们创建了一个 set 容器,并将比较函数作为第二个模板参数传递给它。这样,set 就可以使用我们提供的比较函数来处理 Person 类型了。

对于 map,您需要提供一个比较对象,该对象必须满足 operator< 的重载版本,以便容器可以对键进行排序。例如:

struct Person {     std::string name;     int age; };  bool operator<(const Person& p1, const Person& p2) {     return p1.name < p2.name; }  int main() {     std::map<Person, std::string> people;     // ... } 

在这个例子中,我们重载了 Person 类型的 operator<,以便可以对它们进行比较。然后,我们创建了一个 map 容器,并将 Person 类型作为键类型传递给它。这样,map 就可以使用我们提供的比较操作符来处理 Person 类型了。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!