#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()));
}
前面的代碼不能編譯。在標準的C++方式下,錯誤輸出是冗長而難以理解的。關鍵部分似乎是這樣...有關插入迭代器和重載運算符的C++ STL問題
/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 >]()’
......這意味着賦值運算符所需的定義沒有定義。我查看了insert_iterator的源代碼,並指出它已經重載了賦值運算符。複製算法必須使用插入迭代器重載的賦值運算符來完成它的工作(?)。
我想這是因爲我的輸入迭代器位於字符串的容器上,而我的輸出迭代器位於MyContainers的容器上,重載的insert_iterator賦值運算符無法再工作。
這是我最好的猜測,但我可能是錯的。
那麼,爲什麼這不起作用,我該如何實現我想要做的?
謝謝!!!!!!! – rshepherd 2010-04-21 19:21:17
'std :: set'需要'operator <()' – wilhelmtell 2010-04-21 20:29:51
嚴格地說,它不是。這是一個小問題,並在答案中簡要提及。 – UncleBens 2010-04-21 20:55:05