c++映射迭代器没有在映射中的每个元素上循环
c++ map iterator not looping over every element in the map
我正试图循环使用我在c++中构建的std::map
映射相当奇怪,键是我创建的结构的向量(我使用了自定义比较器),值是双精度的向量。
我的问题是,当我在映射上迭代时,循环在到达末尾之前就终止了。
typedef map<int, map<vector<svm_node>, vector<double>, CompareSparseVectors> >::iterator DataIter;
typedef map<vector<svm_node>, vector<double>, CompareSparseVectors>::iterator SVIter;
for(DataIter di = myModel.modelData.begin();
di != myModel.modelData.end();
++di) {
cout << "The size of (di->second) is " << di->second.size() << endl;
int itercount = 0;
for(SVIter sv = (di->second).begin();
sv != (di->second).end();
++sv) {
cout << itercount << endl;
itercount ++;
}
}
}
这个代码片段的输出是
The size of (di->second) is 47
0
1
The size of (di->second) is 18
0
1
myModel.modelData是一个map<int, map<vector<svm_node>, vector<double>, CompareSparseVectors> >
,而ComparseSparseVectors
是一个包含vector<svm_node>
的比较函数的结构。如果你需要更多的上下文,请告诉我,但似乎我的映射不够复杂,以至于当用.size()
查询时,它声称是一个大小,但无法完全迭代。
编辑:这是svm_node
和CompareSparseVector
结构的代码。
struct svm_node{
int index;
double value;
friend bool operator==(const svm_node& a,const svm_node& b) {
return (a.index == b.index
&&
fabs(a.value - b.value) < 1E-20);
}
friend bool operator!=(const svm_node& a,const svm_node& b) {
return (a.index != b.index
||
fabs(a.value - b.value) > 1E-20);} };
struct CompareSparseVectors {
bool operator()(const vector<svm_node> a, const vector<svm_node> b)
{
if(a.size() != b.size()) return true;
for(int i = 0; i < a.size(); ++i) {if(!(a[i] == b[i])) return true;}
return false;
}
};
确保ComparseSparseVectors
返回true,当且仅当一个向量小于另一个向量。你应该能够运行:
vector<svm_mode> a, b;
cout << (CompareSparseVectors(a,b) && CompareSparseVector(b,a));
并且对于所有可能的a和b得到0。
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 访问映射向量的映射元素(c++)
- 为什么 unordered_map::equal_range upper_bound 如果键小于第一个映射元素,则返回
- 根据类成员对同一密钥的多映射元素进行排序
- C++查找并擦除多映射元素
- C++ for_each循环找不到指向映射元素
- 创建映射元素时,请避免使用值副本
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- c++中如何更改映射元素的值
- 传递对映射元素的引用作为参数
- 如果没有找到映射元素将返回什么
- 不能访问指针-向量映射元素
- 存储内部排序映射元素的最快方式
- 无序多映射元素插入
- 哈希映射元素的值未正确打印
- 修改所有映射元素的键
- 复制映射元素的正确方法