簡體   English   中英

使用std :: erase和std :: remove從向量中刪除元素不能使用自定義結構作為值

[英]Removing element from vector using std::erase and std::remove not working with custom struct as value

我正在嘗試使用std :: remove和std :: erase從向量中刪除元素。 我不知道索引,只有值。 但是,它不起作用,可能與我的自定義結構的運算符有關,但是我不知道如何解決它。

問題是這行代碼:

stillAvailable.erase(remove(stillAvailable.begin(), stillAvailable.end(), previousRound[j]), stillAvailable.end());

其中stillAvailable的類型為std :: vector,而previousRound [j]的類型為Team。 團隊是一個看起來像這樣的結構:

struct Team
{
  int country;
  std::string name;
  int positionGP;
  int groupID;
};

我收到以下錯誤代碼:

League.cc: In member function `bool League::generateSchema(int, std::vector<Team, std::allocator<Team> >)':
League.cc:131: error: no match for 'operator*' in '*temp'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `_OutputIterator std::remove_copy(_InputIterator, _InputIterator, _OutputIterator, const _Tp&) [with _InputIterator = __gnu_cxx::__normal_iterator<Team*, std::vector<Team, std::allocator<Team> > >, _OutputIterator = __gnu_cxx::__normal_iterator<Team*, std::vector<Team, std::allocator<Team> > >, _Tp = Team]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:1114:   instantiated from `_ForwardIterator std::remove(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = __gnu_cxx::__normal_iterator<Team*, std::vector<Team, std::allocator<Team> > >, _Tp = Team]'
League.cc:145:   instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:1037: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __value'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `_RandomAccessIterator std::find(_RandomAccessIterator, _RandomAccessIterator, const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Team*, std::vector<Team, std::allocator<Team> > >, _Tp = Team]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:314:   instantiated from `_InputIterator std::find(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = __gnu_cxx::__normal_iterator<Team*, std::vector<Team, std::allocator<Team> > >, _Tp = Team]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:1112:   instantiated from `_ForwardIterator std::remove(_ForwardIterator, _ForwardIterator, const _Tp&) [with _ForwardIterator = __gnu_cxx::__normal_iterator<Team*, std::vector<Team, std::allocator<Team> > >, _Tp = Team]'

League.cc:145:   instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:207: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:211: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:215: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:219: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:227: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:231: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:235: error: no match for 'operator==' in '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Team*, _Container = std::vector<Team, std::allocator<Team> >]() == __val'

任何幫助將不勝感激! 提前致謝!

std::remove使用operator== ,不會為您的類和結構自動重載。 您將必須自己編寫:

bool operator==(const Team & lhs, const Team & rhs)
{
    // compare lhs and rhs in such a way that you return true if they
    // are equal, and false if they are not equal.  You can define
    // equal to mean whatever you want here.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM