开发者

c++ stl find algo on multimap

std::multimap<size_type,size_type>::iterator it;
std::multimap<size_type,size_type>::iterator itlow = colToRow.lower_bound(cols[i]);
std::multimap<size_type,size_type>::iterator itup = colToRow.upper_bound(cols[i]);

if((it = std::find(itlow,itup,std::pair<size_type,size_type>(cols[i],b))) != itup)

Why does this keep giving me an error, cols[i] and b are both of size type and when I insert into the multimap, it has no problem of inserting it as a pair, how else can this be done?

Thank you,

The error:

/usr/include/c++/4.3/bits/stl_algo.h: In function '_InputIterator std::__find(_InputIterator, _InputIterator, const _Tp&, std::input_iterator_tag) [with _InputIterator = std::_R开发者_StackOverflow中文版b_tree_iterator<std::pair<const unsigned int, unsigned int> >, _Tp = std::pair<unsigned int, unsigned int>]':
/usr/include/c++/4.3/bits/stl_algo.h:3814:   instantiated from '_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = std::_Rb_tree_iterator<std::pair<const unsigned int, unsigned int> >, _Tp = std::pair<unsigned int, unsigned int>]'
SMatrix.cpp:286:   instantiated from here
/usr/include/c++/4.3/bits/stl_algo.h:151: error: no match for 'operator==' in '__first.std::_Rb_tree_iterator<_Tp>::operator* [with _Tp = std::pair<const unsigned int, unsigned int>]() == __val'


The value_type of a multimap<size_type, size_type> is a std::pair<size_type const,size_type>, rather than a std::pair<size_type,size_type>.

You are trying to find a std::pair<size_type,size_type>, but this cannot be compared to a std::pair<size_type const,size_type>.


Try:

if((it = std::find(itlow,itup,std::pair<const size_type,size_type>(cols[i],b))) != itup)
//                                      ^^^^^

Due to the hint from this error:

error: no match for 'operator==' in '__first.std::_Rb_tree_iterator<_Tp>::operator* 
    [with _Tp = std::pair<const unsigned int, unsigned int>]() == __val'
//                        ^^^^^^^^^^^^^^^^^^
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜