stl相关内容

集合、多重集、映射和多重映射如何在内部工作

多重集如何工作?如果一个集合不能有一个值映射到一个键,它是否只包含键? 另外,关联容器是如何工作的?我的意思是内存中的向量和双端队列是顺序定位的,这意味着如果它们很大,删除/删除(除了开始[deque]和结束[vector,deque])会很慢. 而列表是一组指针,它们不是按顺序位于内存中的,这会导致更长的搜索但更快的删除/删除. 集合、映射、多重集合和多重映射如何存储以及它们如 ..
发布时间:2022-01-17 18:41:54 C/C++开发

set::insert 的复杂度

我已经阅读到集合中的插入操作只需要 log(n) 时间.这怎么可能? 要插入,首先我们要在排序后的数组中找到新元素必须位于的位置.使用二分查找需要 log(n).然后要插入到那个位置,它后面的所有元素都应该向右移动一个位置.又需要n次. 我的怀疑是基于我的理解,即 set 是作为数组实现的,并且元素按排序顺序存储.如果我的理解有误,请纠正我. 解决方案 std::set 通常实 ..
发布时间:2022-01-17 18:40:17 C/C++开发

就地 C++ 设置交集

在 C++ 中相交两个集合的标准方法是执行以下操作: std::set设置_1;//有一些元素std::set设置_2;//与其他一些元素std::set十字路口;//相交的目的地std::set_intersection(set_1.begin(), set_1.end(), set_2.begin(), set_2.end(), std::inserter(the_int ..
发布时间:2022-01-17 18:39:11 C/C++开发

是否有支持 insert() 等的 sorted_vector 类?

通常,使用排序的std::vector 比std::set 更有效.有谁知道一个库类sorted_vector,它基本上和std::set有类似的接口,但是将元素插入到排序的向量中(这样就没有重复了),使用二分查找find元素等? 我知道编写起来并不难,但最好不要浪费时间并使用现有的实现. 更新: 使用排序向量而不是集合的原因是:如果您有数十万个小集合,每个集合仅包含 10 个左右的成 ..
发布时间:2022-01-17 18:38:00 C/C++开发

将多个集合元素合并到一个集合中

我想知道是否有任何 std 库或 boost 工具可以轻松地将多个集合的内容合并为一个. 就我而言,我有一些想要合并的整数集. 解决方案 你可以这样做: std::sets1;std::sets2;//填充你的集合s1.insert(s2.begin(), s2.end()); ..
发布时间:2022-01-17 18:37:26 C/C++开发

set<pair> 和 set<pair> 有什么区别?并用 C++ 映射?

有两种方法可以在 C++ STL 中轻松创建键值属性:映射和对集.例如,我可能有 map 或 set> 在算法复杂度和编码风格方面,这些用法有什么区别? 解决方案 集合中的元素不能被修改.set 的 iterator 和 const_iterator 是等价的.因此,用 set;>,您不能就地修改 value_class.您必须从集合中删除旧值并添加新值.但是,如果 value_c ..
发布时间:2022-01-17 18:37:16 C/C++开发

c++ STL设置差异

C++ STL 集合数据结构有集合差分算子吗? 解决方案 有,在中调用:std::set_difference.用法是: #include #include #include //...std::sets1,s2;//用值填充 s1 和 s2std::set结果;std::set_difference(s1.begin(), s ..
发布时间:2022-01-17 18:36:46 C/C++开发

为什么插入使 std::set 反向迭代器无效

我的理解是关联容器的迭代器在插入或擦除期间不会失效(除非迭代器指向的节点被擦除).但是在下面的程序中插入似乎使迭代器无效.是不是我的理解错了? typedef std::setmyset_t;int main(int argc, char **argv){myset_tr;myset_t::reverse_iterator rit;myset_t::reverse_iterator srit;i ..
发布时间:2022-01-17 18:32:28 C/C++开发

迭代器有效性,在 std::set 中的 erase() 调用之后

在 std::set invalidate iterator 中进行擦除调用吗?正如我在最后一行的第 5 名以下所做的那样..?如果是的话,从集合中删除所有元素的更好方法是什么 类classA{上市:类A(){};~classA(){};};结构结构B{};typedef std::set 设置类型;typedef std::map ..
发布时间:2022-01-17 18:28:37 C/C++开发

c++ set 容器的问题

当我尝试编译以下代码时: #include #include #include 使用命名空间标准;模板类属性{上市:对p;属性(T t, S s) { p = make_pair(t,s);}};主函数(){设置 我收到编译错误.但是,当我用向量替换 set 并因此使用 push_back 函数而不是 insert 函数时,一切正常.谁能解 ..
发布时间:2022-01-17 18:14:46 C/C++开发

std::set 迭代顺序是否始终根据 C++ 规范升序?

这里 http://www.cplusplus.com/reference/stl/set/ 我读到了C++ 中的 std::set “通常"被实现为一棵树(红黑树?)并且它是排序的. 我不明白,这是否意味着集合的按规范迭代顺序总是升序?或者它只是“通常的实现细节",有时,一些库/编译器可能会违反这个约定? 解决方案 根据 C++ 标准,对 std::set 中元素的迭代按照 std ..
发布时间:2022-01-17 18:09:23 C/C++开发

修改 std::set 的元素时会发生什么?

如果我更改 std::set 的一个元素,例如,通过一个迭代器,我知道它不是“重新插入"或“重新排序",但有没有提到它是否会触发未定义的行为?例如,我想插入会搞砸.有没有具体提到会发生什么? 解决方案 您不应该直接编辑存储在集合中的值.我从具有一定权威性的 MSDN 文档中复制了这个: 使用 STL 容器类集用于存储和检索数据来自一个集合,其中的值包含的元素是独一无二的并作为关键值根 ..
发布时间:2022-01-17 17:54:06 C/C++开发

Fortran 中的 STL 类似物

基础:我有非常大的并行 Fortran90/MPI 程序,代表复杂的物理模型.我想为其添加新功能:例如,我需要组织消息队列,在某处引入合并排序并使用哈希表. 问题:我自己知道如何编写哈希表、创建队列和代码归并排序,但我认为发明自行车不是一个好主意. 问题:在这种情况下,Fortran 大师应该怎么做?我应该从 Fortran 构建与 C++ 类的绑定并使用 STL 在那里实现逻辑,还是 ..
发布时间:2022-01-14 09:31:09 C/C++开发

C++/STL 中是否支持按属性对对象进行排序?

我想知道 STL 是否支持这个: 假设我有这样的课程: 类人{上市:int getAge() 常量;双 getIncome() 常量;....}; 还有一个向量: 向量人们; 我想按年龄对人的向量进行排序:我知道我可以通过以下方式做到这一点: 类 AgeCmp{上市:bool operator() ( const Person* p1, const Person* p2 ) con ..
发布时间:2022-01-13 17:43:08 C/C++开发

C++ 转换向量<int>到向量<double>

什么是转换 std::vector 的好方法?intVec 到 std::vector双向量.或者,更一般地,转换两个可转换类型的向量? 解决方案 使用std::vector的范围构造函数: std::vector内部向量;std::vectordoubleVec(intVec.begin(), intVec.end()); ..
发布时间:2022-01-12 23:39:47 C/C++开发