确定C++11 unordered_set中是否发生碰撞
Determine if collision occurred in C++11 unordered_set
我正在使用 C++11,我正在尝试将元素添加到无序集合中,如果我已经将元素添加到我的unordered_set我不想再次添加它(即不要再次将 cat 添加到下面的无序集合中。
std::unordered_set<std::string> s;
std::vector<std::string> myString;
myString.push_back("cat");
myString.push_back("dog");
myString.push_back("bird");
myString.push_back("cat");
for(auto &i : myString){
//add elements from myString to unordered_set s
}
我不确定如何做到这一点。我意识到我需要有一个与我的s.insert(i)
相等的std::pair
,但是我不太确定如何设置它,以便我可以做到这一点。
任何帮助将不胜感激
你为什么担心? std::unordered_set
只包含唯一元素(如果已经存在,则自动不添加),但有一个find()
函数:
for(auto &i : myString){
if(s.insert(i).second)
//inserted
else
//already exists
}
for(auto& i: myString) {
if(s.insert(i).second) std::cout << "inserted" << std::endl
else std::cout << "dupe" << std::endl;
}
unordered_set
不会插入重复项,无需检查。
std::unordered_set
包含一组唯一对象。
这意味着它不能包含重复项(如果返回 true,则两个元素被视为等效operator==
)。
例:
std::unordered_set<std::string> s;
s.emplace("cat");
s.emplace("cat");
s.emplace("cat");
// At this point s only contains one std::string object.
要从std::vector
添加唯一项目,只需使用如下std::vector::insert
:
s.insert(std::begin(vec), std::end(vec));
如果std::unordered_set
已包含具有等效键的元素,则不会插入元素。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 说单精度碰撞的第一个数字是 131072.02 是否正确?(阳性,将 2 位数字视为尾数)
- (UE4)检查一个点是否位于碰撞圆圈中
- 确定C++11 unordered_set中是否发生碰撞
- 堆管理系统的unordered_map.是否可以进行无碰撞设置
- 在3D中,确定射线是否与三角形碰撞以及到碰撞点的距离