gpt4 book ai didi

c++ - std::multiset 的模板参数A、B分别是什么意思,是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:03 24 4
gpt4 key购买 nike

我在另一个关于 std::multiset 的问题中问过,但现在我发现我需要一个体面的理解并且在互联网上找不到任何更复杂的例子。

你能给我解释一下吗,也许举例说明,如何std::multiset<A,B>有效,A 和 B 的功能是什么,以及是否可以省略其中的任何一个?我可以将 A 或 B 放入某个变量吗?我真的很感激一些简短的例子或引用,

最佳答案

std::multiset 类模板的第一个模板参数指定要存储在集合中的对象类型,第二个模板参数指定比较仿函数的类型。我们现在可以忽略第三个模板参数。

第二个可选参数,B , 必须实现 strict weak ordering并用于订购 set/multiset。需要此排序以确保元素查找操作的对数复杂性。这是一个例子:

struct A
{
int x;
};

struct B
{
bool operator()(const A& lhs, const A& rhs) const {
return lhs.x < rhs.x;
}
};

本类(class)B有一个 operator() ,这意味着它可以被调用,例如

B comp;
A a1, a2;
bool a1lessThana2 = comp(a1, a2);

集合/多重集合需要这样做才能将元素放置在正确的位置,并确定两个元素是否相同。如果有operator<对于您的类型,可以省略第二个模板参数。

bool operator<(constA& lhs, const A& rhs) { return lhs.x < rhs.x; }

这是一个用法示例:

int main()
{
std::multiset<A, B> m;
A a1, a2;
a1.x = 23;
a2.x = 100;
m.insert(a1);
m.insert(a2);
}

关于c++ - std::multiset<A,B> 的模板参数A、B分别是什么意思,是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13514910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com