我已经在另一个问题中询问了multiset中的问题,但现在我发现我需要一个体面的理解,并且在互联网上找不到更复杂的例子.
你可以解释一下,也许是示例,multiset<A,B>A和B的作用和功能是什么,还有什么可以省略?我可以将A或B放到某个变量中吗?我真的很感激一些简短的例子或参考,
jua*_*nza 19
所述std::multiset类模板具有第一模板参数,指定要被存储在该组的对象的类型,和第二个指定一个比较算符的类型.我们现在可以忽略第三个模板参数.
第二个可选参数B必须实现严格的弱排序,并用于对set/multiset进行排序.需要这种排序以确保元素查找操作的对数复杂性.这是一个例子:
struct A
{
int x;
};
struct B
{
bool operator()(const A& lhs, const A& rhs) const {
return lhs.x < rhs.x;
}
};
Run Code Online (Sandbox Code Playgroud)
这个类B有一个operator(),这意味着它可以被调用,例如
B comp;
A a1, a2;
bool a1lessThana2 = comp(a1, a2);
Run Code Online (Sandbox Code Playgroud)
这需要set/multiset将元素放在正确的位置,并确定两个元素是否相同.如果operator<您的类型有,则可以省略第二个模板参数.
bool operator<(constA& lhs, const A& rhs) { return lhs.x < rhs.x; }
Run Code Online (Sandbox Code Playgroud)
这是一个用法示例:
int main()
{
std::multiset<A, B> m;
A a1, a2;
a1.x = 23;
a2.x = 100;
m.insert(a1);
m.insert(a2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15941 次 |
| 最近记录: |