gpt4 book ai didi

c++ map迭代器不遍历 map 中的每个元素

转载 作者:行者123 更新时间:2023-11-28 03:13:16 32 4
gpt4 key购买 nike

我正在尝试遍历我用 C++ 构建的 std::map

map 相当奇怪,键是我创建的结构 vector (我使用了自定义比较器),值是 double vector 。

我的问题是,当我遍历 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> 比较函数的结构.如果您需要更多上下文,请告诉我,但似乎我无法拥有足够复杂的 map ,以至于在使用 .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;
}
};

最佳答案

确保当且仅当一个 vector 小于另一个时,您的ComparseSparseVectors 返回真。你应该能够运行:

vector<svm_mode> a, b;
cout << (CompareSparseVectors(a,b) && CompareSparseVector(b,a));

并为所有可能的 a 和 b 得到 0。

关于c++ map迭代器不遍历 map 中的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755031/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com