在java中,存放不同元素的容器是set,元素是否相同使用equals方法和hashCode方法来定义。
假如要给set中存放自定义类,那么就得实现equals方法和hashCode方法。
在c++中也有c++,用来存放不同的元素,天真的我也就直接使用了set,并且重载了==运算符
结果发现,里面是有问题。
c++中的set有两种,分别是
c++中的std::set,是基于红黑树的平衡二叉树的数据结构实现的一种容器,因为其中所包含的元素的值是唯一的
unordered_set的实现方式为哈希函数,所以无序关联容器不会根据key值对存储的元素进行排序
所以简单的来说,使用有序set,你得重载小于号
里面你只要记住两点,如果两个元素相等,就返回false
如果两个元素不相等,那么就得指定一个不会矛盾的比较方法。
使用无序set,那就和java类似了。
第一重载==运算符
第二自定义hash函数
其实如果单纯的只是想存放一堆不同的元素,在c++中应该使用unordered_set。
我之前的问题是知道java中有个set,相同的需求就直接用了c++中的set。
另外unordered_set是c++11才出来的。
聊聊c++中的set
原创
©著作权归作者所有:来自51CTO博客作者蓝枫居士的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:关于用户分级查看的解决方案
下一篇:程序员的素养
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
聊聊TCP中的TIME_WAIT
TIME_WAIT 的产生、作用以及优化
TIME_WAIT -
C++ set用法
STL:set
键值 子树 中序遍历 -
C++中set 集合用法
set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是
c set 迭代器 键值 #include