#include <list>
#include <set>
#include <iterator>
#include <algorithm>
using namespace std;
class MyContainer {
public:
string value;
MyContainer& operator=(const string& s) {
this->value = s;
return *this;
}
};
int main()
{
list<string> strings;
strings.push_back("0");
strings.push_back("1");
strings.push_back("2");
set<MyContainer> containers;
copy(strings.begin(), strings.end(), inserter(containers, containers.end()));
}
Le code précédent ne compile pas. En mode C++ standard, la sortie d'erreur est verbeuse et difficile à comprendre. La partie clé semble être ... ceC++ STL question liée à l'insertion d'itérateurs et opérateurs surchargés
/usr/include/c++/4.4/bits/stl_algobase.h:313: error: no match for ‘operator=’ in ‘__result.std::insert_iterator::operator* [with _Container = std::set, std::allocator >]() = __first.std::_List_iterator::operator* [with _Tp = std::basic_string, std::allocator >]()’
... que j'Interpet signifie que l'opérateur d'affectation nécessaire n'est pas défini. J'ai regardé le code source de insert_iterator et noté qu'il a surchargé l'opérateur d'affectation. L'algorithme de copie doit utiliser l'opérateur d'affectation surchargé d'itérateurs d'insertion pour effectuer son travail (?).
Je suppose que parce que mon itérateur d'entrée est sur un conteneur de chaînes et que mon itérateur de sortie est sur un conteneur de MyContainers que l'opérateur d'assignation insert_iterator surchargé ne peut plus fonctionner.
C'est ma meilleure estimation, mais je me trompe probablement. Alors, pourquoi cela ne fonctionne-t-il pas exactement et comment puis-je accomplir ce que j'essaie de faire?
Merci !!!!!!! – rshepherd
'std :: set' a besoin de' operator <() ' – wilhelmtell
Strictement parlant, ce n'est pas le cas. C'est un problème secondaire ici, et brièvement mentionné dans la réponse. – UncleBens