數字是載體的載體,按字符鍵。所以它 - >第二個是矢量。你不能將一個向量push_back到一個char向量中。
您應該迭代數字[set1]和數字[set2],而不是迭代數字。或者正如bdonlan所說,你可以插入一個範圍,儘管他將所有數字聯合起來,而不僅僅是set1和set2。
另請參見:其中的item
定義?你的意思是it
?
另外,請注意,push_back不檢查值是否已經在向量中。因此,一旦你清楚瞭解這個通用方法的細節,你的例子就會起作用,'E'和'G'的聯合將是一個包含'a','b','c','d'的向量, 'E'。但是如果你把'a','b','c'與'c','d','e'結合在一起,你會得到'a','b','c','c', 'd','e',這可能不是你想要的工會。
假設你的矢量總是要進行排序,你可以改用標準算法set_union:
#include <algorithm>
#include <iterator>
...
numbers[set3].clear();
std::set_union(numbers[set1].begin(), numbers[set1].end(),
numbers[set2].begin(), numbers[set2].end(),
std::back_inserter(numbers[set3]));
如果你想利用一切的工會數字,我可能會跟要麼去:
vector<char> sofar;
map<char, vector<char> >::iterator it;
for (it = numbers.begin(); it != numbers.end(); ++it) {
// new, empty vector
vector<char> target;
// merge everything so far with the next item from the map,
// putting the results in target
set_union(sofar.begin(), sofar.end(),
it->second.begin(), it->second.end(),
back_inserter(target));
// the result is the new "everything so far"
// note that this operation is very fast. It doesn't have to
// copy any of the contents of the vector, just exchange some pointers.
swap(target, sofar);
}
// replace numbers[set3] with the final result
swap(numbers[set3], sofar);
或者:
set<char> sofar;
map<char, vector<char> >::iterator it;
for (it = numbers.begin(); it != numbers.end(); ++it) {
// let std::set remove the duplicates for us
sofar.insert(it->second.begin(), it->second.end());
}
// replace numbers[set3] with the final result
numbers[set3].clear();
numbers[set3].insert(numbers[set3].end(), sofar.begin(), sofar.end());
這是更少的代碼,可能是FAS ter,或者可能會過多地分配內存分配器。不知道哪個更好,對於小型收藏品的表現幾乎肯定不重要。
set
的版本也不需要向量進行排序,雖然它的速度更快。
你會得到哪個錯誤? – sth 2009-08-07 23:09:56
爲什麼使用矢量當你可以使用集? –
2009-08-08 00:53:59