C++ c++;映射迭代器未在映射中的每个元素上循环

C++ c++;映射迭代器未在映射中的每个元素上循环,c++,maps,C++,Maps,我试图循环使用c语言构建的std::map++ 这个映射相当奇怪,键是我创建的结构的向量(我使用了一个自定义比较器),值是双精度向量 我的问题是,当我在地图上迭代时,循环在我到达终点之前终止 typedef map<int, map<vector<svm_node>, vector<double>, CompareSparseVectors> >::iterator DataIter; typedef map<vector<svm_no

我试图循环使用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 ++;
    }
  }
}
myModel.modelData是一个
映射
比较分析向量
是一个包含
向量
比较函数的结构。如果您需要更多的上下文,请让我知道,但似乎我没有一个足够复杂的映射,当使用
.size()
查询时,它声称是一个大小,但无法完全迭代

编辑:下面是
svm_节点
CompareSparseVector
structs的代码

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;
    }
  };
struct-svm\u节点{
整数指数;
双重价值;
friend bool运算符==(常量svm_节点&a,常量svm_节点&b){
返回(a.index==b.index
&&
晶圆厂(a值-b值)<1E-20);
}
friend bool运算符!=(常量支持向量机节点&a,常量支持向量机节点&b){
返回值(a.index!=b.index
||
fabs(a值-b值)>1E-20);};
结构比较parsevectors{
布尔运算符()(常数向量a,常数向量b)
{
如果(a.size()!=b.size())返回true;
for(inti=0;i
当且仅当一个向量小于另一个向量时,确保您的
ComparseSparseVectors
返回true。您应该能够运行:

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

cout没有
(aI没有用于svm_节点的重载函数。我的印象是,如果这是我在CompareSparseVector中使用的唯一运算符,我只需要重写==即可。我将为svm_节点/CompareSparseVector添加代码……您不需要重载“哦,天哪,我想可能就是这样。出于某种原因,我认为比较函数应该表示相等,而不是小于相等。
vector<svm_mode> a, b;
cout << (CompareSparseVectors(a,b) && CompareSparseVector(b,a));