温馨提示×

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

c++
小樊
84
2024-09-25 01:40:15
栏目: 编程语言

是的,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 类型了。

0