-
174 votesanswersviews
C排序和跟踪索引
使用C,希望是标准库,我想按升序对一系列样本进行排序,但我还想记住新样本的原始索引 . 例如,我有一个集合,矢量或样本矩阵 A : [5, 2, 1, 4, 3] . 我想将它们排序为 B : [1,2,3,4,5] ,但我也想记住值的原始索引,所以我可以得到另一个集合: C : [2, 1, 4, 3, 0 ] - 它对应于'B'中每个元素的索引,在原始'A'中 . 例如,在Matlab中... -
398 votesanswersviews
如何通过索引从std :: vector <>中删除元素?
我有一个std :: vector <int>,我想删除第n个元素 . 我怎么做? std::vector<int> vec; vec.push_back(6); vec.push_back(-17); vec.push_back(12); vec.erase(???); -
1 votesanswersviews
重载operator->用于STL迭代器
我正在编写自己的C STL映射容器实现 . 现在我正在尝试实现迭代器 . 它应该允许你做类似iter-> first和iter-> second之类的事情,它们分别返回键/值,而iter是一个对象而不是一个指针 . 我想知道我应该如何重载这个?这有点令人困惑,因为我不确定返回类型应该是什么;我认为它必须是成员第一/第二的对象 . 是否通常返回对包装器/接口对象的引用或类似的东西? -
0 votesanswersviews
如何将向量的第一个元素移动到另一个元素的末尾
我有两个相同类型的向量,如下所示: std::vector<Task*> ToRun; std::vector<Task*> Completed; 完成 Task 后,需要将其自动从 ToRun 向量容器移动到 Completed 向量中 . ToRun Vector contains TaskOne TaskTwo TaskThree ... TaskN Compl... -
4 votesanswersviews
STL迭代器作为返回值
我有一个包含std :: vector的A类,我想从A类外部访问该向量 . 我想到的第一件事就是创建一个将迭代器返回给向量的get函数,但是遍历向量我将需要两个迭代器(开始和结束) . 我想知道是否有任何方法(技术或模式)只用一个迭代器迭代整个向量?或者可能有其他方式来访问vector,当然不使用vector作为返回值:) -
7 votesanswersviews
如何使用公共const迭代器和私有非const迭代器提供类似于stl的容器?
我有一个包含std :: list的类,并且希望为const_iterator提供public begin()和end(),为plain iterator提供private begin()和end() . 但是,编译器看到私有版本并抱怨它是私有的而不是使用公共const版本 . 我理解C不会在返回类型(在本例中为const_iterator和iterator)上重载,因此它选择非const版本,因... -
6 votesanswersviews
采用STL样式迭代器的C虚方法
我想要一个接口ModelGenerator,它有一个方法generate(),它接受一个可迭代的Evidence列表并创建一个Model . 使用STL伪鸭子类型迭代器成语... template<class Model> class ModelGenerator { public: template<class Iterator> virtual bo... -
-2 votesanswersviews
错误:没有匹配函数来调用'std :: map
typedef struct { string strDatabaseName; set <string, greater<string> > setDBAccName; } UserDBAInfo_t; typedef struct { map<int, UserDBAInfo_t > mapUserDBAInfo; } UserDB... -
1 votesanswersviews
unique_ptr列表,用于派生模板类
我想创建一个 list<unique_ptr<Base>> listOfBaseUniquePtr . 这将能够给我两个:1.独特的ptrs,和2.多态性 . 我可以调用每个派生类的虚函数 . 有些东西对我不起作用 . 看看下面的代码示例: #include <iostream> #include <list> #include <memor... -
59 votesanswersviews
如何为 Map 创建自己的比较器?
typedef map<string, string> myMap; 当将新对插入 myMap 时,它将使用键 string 通过其自己的字符串比较器进行比较 . 是否可以覆盖该比较器?例如,我想比较密钥 string 的长度,而不是字母表 . 或者还有其他方法来排序 Map 吗? -
3 votesanswersviews
如何将可变参数args传递给std :: thread?
我想通过从C 11包装std :: thread类来使用我自己的Thread实现,所以我将能够处理我想要的异常 . 这是我的包装类: #include <Types.hpp> #include <thread> #include <exception> #include <functional> class Thread { private... -
137 votesanswersviews
如何获取原始数据的std :: vector指针?
我正在尝试使用 std::vector 作为 char 数组 . 我的函数接受一个void指针: void process_data(const void *data); 在我刚刚使用此代码之前: char something[] = "my data here"; process_data(something); 哪个按预期工作 . 但是现在我需要 std::vector... -
2 votesanswersviews
在单个链接列表上实现选择排序
Heya我正在尝试在单链表上实现选择排序算法,我知道代码中存在一些问题但是虽然我的链表包含数字7 1 2 6,但运行后的输出是7777 . 任何帮助,将不胜感激 . template<class Type> void UnOrderedLinkedList<Type>::selectionSort() { nodeType<Type>* loc; nodeTyp... -
5 votesanswersviews
将结构实例存储在std :: map中
我正在尝试将一些结构映射到其他一些实例,如下所示: template <typename T> class Component { public: typedef std::map<EntityID, T> instances_map; instances_map instances; Component() {}; T add(En... -
3 votesanswersviews
C stl map:与BSTR有关的问题
我在我的代码中使用了一个映射 <BSTR,struct> bstr作为键并构造值 . 这项工作还是我必须重新定义一些东西? 我看到没有编译问题,我也可以添加元素 . 但是, map.find() 不起作用 . 即使该元素存在,它也始终返回 map.end() (未找到元素) . 我做了一个临时的解决方法如下 - 从 map.begin() 循环到 map.end() 并为每个元素执行... -
7 votesanswersviews
std :: map和二进制搜索树
我已经读过std map是使用二叉搜索树数据结构实现的 . BST是一种顺序数据结构(类似于数组中的元素),它将元素存储在BST节点中并按顺序维护元素 . 对于例如如果element小于node,则将其存储在节点的左侧,如果它大于node,则将其存储在node的右侧 . 通过这种方法,我们实现了搜索,插入等各种操作的O(log n)复杂度 . 但是,std map是一个关联容器 . 我们有一个键和... -
1 votesanswersviews
std :: map :: find的效率是否与值的数据大小有关?
我使用 std::map<std::pair<int, int>, class B> 来保存网格图的信息,B类包含大约10000字节的数据 . 我发现40000次 find 操作需要大约10ms,尽管 Map 只有四个键值 . 当我将B类数据大小减少到2500字节时,成本也降低到大约3.5ms . 我知道查找操作的时间复杂度是O(log(N)),这种现象的原因是什么? -
0 votesanswersviews
使用 Map 存储已经读入的数据?
各位大家好,感谢您抽出宝贵时间阅读本文 . 所以基本上我试图通过文本文件读取我读过的数据并将其存储到: std::map<double,pair<double,double>>storage 其中第一个双精度表示坐标的ID,而对表示x和y值,可以忽略z值 . ID X Y Z / n ID X Y Z. 类顶点 class vertex { public: ... -
0 votesanswersviews
使用我的自定义迭代器和stl算法
我正在尝试创建自己的迭代器,并且我已经使用std :: generate算法按预期工作了 . 但是,当我尝试std :: find的std :: max_element时,我得到了一些神秘的错误 . 这是我的迭代器的接口: template <typename GridT, typename GridPtr, typename GridRef, ... -
3 votesanswersviews
C STL type_traits问题
我正在看最新的C9 lecture并注意到一些有趣的东西.. 在他对type_traits的介绍中,Stephan使用了以下内容(正如他所说,设计的)示例: template <typename T> void foo(T t, true_type) { std::cout << t << " is integral"; } temp... -
185 votesanswersviews
如何从std :: map中检索所有键(或值)并将它们放入向量中?
这是我出来的可能方式之一: struct RetrieveKey { template <typename T> typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map<int, int> m;... -
9 votesanswersviews
大多数签名/未签名警告的可接受修复?
我自己确信,在一个项目中,我正在研究有符号整数是大多数情况下的最佳选择,即使其中包含的值永远不会是负数 . (更简单的循环反转,更少的错误机会等,特别是对于只能保持0到20之间的值的整数,比如20 . ) 出错的大多数地方是std :: vector的简单迭代,过去常常是一个数组,之后变为std :: vector . 所以这些循环通常如下所示: for (int i = 0; i < s... -
85 votesanswersviews
从矢量中删除元素
我想使用erase方法从向量中清除元素 . 但是这里的问题是元素不能保证在向量中只出现一次 . 它可能存在多次,我需要清除所有这些 . 我的代码是这样的: void erase(std::vector<int>& myNumbers_in, int number_in) { std::vector<int>::iterator iter = myNumber... -
208 votesanswersviews
C按值而不是按位置擦除矢量元素? [重复]
这个问题在这里已有答案: How do I remove an item from a stl vector with a certain value? 9个答案 vector<int> myVector; 并且让我们说向量中的值是这个(按此顺序): 5 9 2 8 0 7 如果我想删除包含值“8”的元素,我想我会这样做: myVector.erase(myVector.beg... -
-1 votesanswersviews
std :: unordered_map ::使用key查找和计数参数无法编译
在为项目编译代码时,我遇到了一些神秘的错误 . 我正在使用 std::unordered_map 在游戏中存储世界各地,因此多人可以在同一区域玩游戏而不会混淆服务器 . 在world_manager.hpp中,我有一个键结构: `` struct chunk_key { int32_t cX, cZ; uint8_t dimension; }; ... -
49 votesanswersviews
使用C vector :: insert()添加到向量的末尾
我必须根据向量元素中的值将值插入某个地方的C STL向量中 . 我正在使用 insert() 函数来完成此任务 . 我意识到,当我想在向量的末尾添加一个新元素时,我可以简单地使用 push_back() . 但为了保持我的代码看起来不错,我想专门使用 insert() ,它将指向所需插入点之后的元素的迭代器和要插入的值作为输入 . 如果作为参数传入的迭代器的值是 v.end() ,其中 v 是我... -
133 votesanswersviews
迭代通过std :: map的顺序是否已知(并由标准保证)?
我的意思是 - 我们知道 std::map 's elements are sorted according to the keys. So, let'表示键是整数 . 如果我使用 for 从 std::map::begin() 迭代到 std::map::end() ,标准是否保证我将通过带有键的元素进行迭代,按升序排序? 例: std::map<int, int> map_; ... -
3 votesanswersviews
如何获取向量的那些元素,其中另一个向量在相应的索引处具有'1' s
我有两个向量 std::vector<int> markedToBeRead(7); // contains: 1,1,0,0,1,0,1 std::vector<float> myVec(7); // contains: 1,2,3,4,5,6,7 从myVec中获取这些元素的最佳方法是什么,其中 markedToBeRead 的相应索引具... -
189 votesanswersviews
为什么标准迭代器范围[开始,结束]而不是[开始,结束]?
为什么标准将 end() 定义为结尾的一个,而不是实际结束? -
17 votesanswersviews
C 11:非成员rbegin()/ rend()函数
由于在C 11修订版中为标准包含添加了非成员 begin() 和 end() 函数,为什么还没有添加 rbegin() 和 rend() 函数的非成员版本?在开始使用 begin() 和 end() 的非成员版本后,我觉得很傻,但却发现我现在必须在使用成员函数和非成员函数调用之间切换 . (我意识到滚动我自己的 rbegin() 和 rend() 的非成员版本是微不足道的,但我添加了标准的'm ...