我有一个std::set<int> ,find这个集合中最大的int的正确方法是什么?
这可能是一个愚蠢的问题,我对C ++和编程一般来说是相当新的。 我希望了解几个STL容器的使用,考虑到这一点,我想知道使用std :: set和使用向量或映射的好处是什么? 我似乎无法find这个问题的明确答案。 我注意到集合使用地图,但为什么不总是使用地图或总是使用集合。 而是提供了2个非常类似的容器。 提前致谢。
我一直在试图find在C ++中的两个std :: set之间的交集,但我不断收到错误。 我为此创build了一个小样本testing #include <iostream> #include <vector> #include <algorithm> #include <set> using namespace std; int main() { set<int> s1; set<int> s2; s1.insert(1); s1.insert(2); s1.insert(3); s1.insert(4); s2.insert(1); s2.insert(6); s2.insert(3); s2.insert(0); set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end()); return 0; } 后面的程序不会生成任何输出,但是我希望有一个新的集合(让我们称之为s3 )和下面的值: s3 = [ 1 , 3 ] 相反,我得到的错误: test.cpp: In function 'int main()': test.cpp:19: error: no matching function […]
C ++ STL集合数据结构是否具有集合差异运算符?
我大量使用std::set<int> ,我经常只需要检查这样的一个集合是否包含一个数字。 我很自然地写: if (myset.contains(number)) … 但是由于缺less一个contains成员,我需要编写繁琐的代码: if (myset.find(number) != myset.end()) .. 或者不那么明显: if (myset.count(element) > 0) .. 有这个devise决定的原因吗?
我需要将std::set复制到std::vector : std::set <double> input; input.insert(5); input.insert(6); std::vector <double> output; std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable 哪里有问题?
我有一个关于std :: set的线程安全性的问题。 据我所知,我可以遍历一个集合,并添加/擦除成员,并不会使迭代器无效。 但请考虑以下情况: 线程“A”遍历一组shared_ptr <Type> 线程“B”偶尔会将项目添加到此集合中。 程序运行时,我遇到了段错误,我不知道为什么发生这种情况。 缺乏线程安全的原因是什么?