温馨提示×

c++中set支持哪些数据类型

c++
小樊
81
2024-11-24 12:46:52
栏目: 编程语言

C++ 中的 std::set 是一个关联容器,它包含一组唯一的对象。std::set 中的元素在插入时自动按键排序。键是元素本身,因此每个元素都必须提供比较运算符(operator<),以便确定其顺序。

std::set 支持以下数据类型:

  1. 基本数据类型:如 intfloatdoublecharbool 等。对于这些基本数据类型,std::set 会使用它们的默认比较运算符。

  2. 指针类型:如 int*float* 等。对于指针类型,std::set 会使用指针的地址进行比较。

  3. 用户自定义类型:你可以使用任何满足以下条件的类或结构体作为 std::set 的元素:

    • 该类型必须定义小于运算符(<)。
    • 如果定义了多个重载的比较运算符,则必须确保 std::set 使用正确的版本。通常,最好只定义一个比较运算符重载函数,并使用 std::less 作为默认比较方式。
  4. 复合类型:如 std::pairstd::tuple 等。这些类型也可以作为 std::set 的元素,但需要确保它们提供了适当的比较运算符。

下面是一个简单的示例,展示了如何使用 std::set 存储自定义类型的元素:

#include <iostream>
#include <set>

struct Person {
    std::string name;
    int age;

    // 自定义比较运算符
    bool operator<(const Person& other) const {
        if (name != other.name) return name < other.name;
        return age < other.age;
    }
};

int main() {
    std::set<Person> people;

    people.insert(Person{"Alice", 30});
    people.insert(Person{"Bob", 25});
    people.insert(Person{"Charlie", 30});

    for (const auto& person : people) {
        std::cout << person.name << ": " << person.age << std::endl;
    }

    return 0;
}

注意:在这个示例中,我们为 Person 结构体重载了小于运算符,以便 std::set 可以正确地比较和排序 Person 对象。

0