#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()));
}
Kode sebelumnya tidak dapat dikompilasi. Dalam mode C++ standar, keluaran kesalahannya bertele-tele dan sulit dimengerti. Bagian kuncinya tampaknya adalah ini...
/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 >]()’
...yang saya tafsirkan berarti bahwa operator penugasan yang dibutuhkan tidak ditentukan. Saya melihat kode sumber untuk insert_iterator dan mencatat bahwa itu telah membebani operator penugasan. Algoritme penyalinan harus menggunakan operator penugasan iterator yang kelebihan beban untuk melakukan tugasnya (?).
Saya kira karena iterator masukan saya ada pada wadah string dan iterator keluaran saya ada pada wadah MyContainers sehingga operator penugasan insert_iterator yang kelebihan beban tidak dapat lagi berfungsi.
Ini tebakan terbaik saya, tapi mungkin saya salah.
Jadi, mengapa hal ini tidak berhasil dan bagaimana saya dapat mencapai apa yang saya coba lakukan?