std :: map以对象作为值

时间:2013-04-29 07:37:04

标签: c++ stl

我在尝试使用std :: map和我自己的类作为值时出错。地图的定义是:

 std::map<std::string,CCrossSection> Xsects;

这一行编译得很好(所以有点工作吗?)

Xsects[sectionId].m_vProfile.push_back(pt);

当我尝试迭代地图时:

for (std::map<std::string,CCrossSection>::iterator xs = Xsects.begin(); xs < Xsects.end(); xs++) {
    it->second.SaveFile(f);
}

它给了我类似的多个错误:

error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'std::_Tree<_Traits>::iterator'
        with
        [
           _Traits=std::_Tmap_traits<std::string,CCrossSection,std::less<std::string>,std::allocator<std::pair<const std::string,CCrossSection>>,false>
        ]
        c:\program files\microsoft visual studio 9.0\vc\include\xtree(1466) : see declaration of 'std::operator <'

我认为这是一个运算较少的问题,我将它添加到我的类CCrossSection的定义中,但它没有改变一件事。后来我读到地图的键必须有较少的运算符定义,我认为std :: string有。任何想法为什么会发生?

干杯 托梅克

1 个答案:

答案 0 :(得分:3)

在比较end迭代器和operator!=

时会编译