我的代码在我定义的抽象数据类型列表中使用std :: count()。 (英语中的Sommet或Edge)。但它不起作用,虽然我已经超载了<和==这样的运营商:
bool operator< (const Sommet &left, const Sommet &right)
{
if(left.m_id_sommet < right.m_id_sommet)
return true;
return false;
}
bool operator== (const Sommet &left, const Sommet &right)
{
if(left.m_id_sommet == right.m_id_sommet)
return true;
return false;
}
请注意,这可以使用std :: sort()和std :: unique()。
错误是:
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h: In function 'typename std::iterator_traits<_Iterator>::difference_type std::count(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = __gnu_cxx::__normal_iterator<Sommet*, std::vector<Sommet, std::allocator<Sommet> > >, _Tp = __gnu_cxx::__normal_iterator<Sommet*, std::vector<Sommet, std::allocator<Sommet> > >]':
Graphe.cpp:43: instantiated from here
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:422: error: no match for 'operator==' in '__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Sommet*, _Container = std::vector<Sommet, std::allocator<Sommet> >]() == __value'
Sommet.h:7: note: candidates are: bool operator==(const Sommet&, const Sommet&)
谢谢!
修改
这就是我使用std :: count()的方法:
for(vector<Sommet>::iterator iter = m_sommets.begin();
iter != s_iter_end; iter++)
{
iter->SetNbSuccesseurs(count(m_sommets.begin(), m_sommets.end(), iter));
}
答案 0 :(得分:2)
您需要传递给count
的是一个值,而不是迭代器:
iter->SetNbSuccesseurs(count(m_sommets.begin(), m_sommets.end(), *iter));
答案 1 :(得分:2)
看起来你传递一个迭代器作为std::count
的最后一个参数,而你需要传入一个值(通过const引用)。
发布编辑:看起来我是正确的,你传递iter
这是一个迭代器。您需要先取消引用它。请尝试传递*iter
。