集合和多重集合只是谓词不同吗?
Do set and multiset differ just by a predicate?
使用以下示例代码:
class cmp
{
public:
bool operator()(int a, int b) { return a<=b; }
};
int main()
{
set<int, cmp> s;
s.insert(2);
s.insert(2);
s.insert(4);
s.insert(5);
s.insert(6);
copy(s.begin(), s.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
multiset<int> ms;
ms.insert(2);
ms.insert(2);
ms.insert(4);
ms.insert(5);
ms.insert(6);
copy(ms.begin(), ms.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
return 0;
}
设置 - 包含唯一值。
多集 - 可以包含重复值。
但是在我的集合实现中,我更改了谓词以接受重复值。如果我们可以通过更改谓词来做到这一点,what's the purpose of having two different containers?
我相信功能也是相同的,实现也是相同的(平衡树)。如果我错过了什么,有人可以详细说明吗?
Compare
关系必须是严格-弱排序(在这两种情况下)§23.2.4/2:
每个关联容器都
Key
参数化,并且Compare
排序关系在Key
元素上诱导严格的弱排序(25.4)。[...]
和 §25.4/4:
术语严格是指非反身关系的要求(
!comp(x, x)
对于所有x
),[...]
您的自定义Compare
(cmp
) 不符合此要求,因此未定义std::set<int, cmp>
的行为。
相关文章:
- 处理多个异常集合的C++方法
- std::condition_variable::wait()如何评估给定的谓词
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 如何将ampl中的集合表示为c++中的向量
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 实现一个在集合上迭代的模板函数
- 尝试使用集合函数时出现分段错误
- 互斥指针的集合
- c++找不到具有相同哈希的无序集合元素
- python集合的C++等价物是什么.计数器
- 如何在C++中递归地按相反顺序打印集合
- Python 集合.计数器,如何避免重复查找
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 集合和多重集合只是谓词不同吗?
- 使用非默认比较谓词的集合容器