這是我以前的post的延續,告訴我該做什麼很好,但實施它沒有工作:S。我只想在C++算法類中使用set_union(和其他集合操作)來處理我的結構。這是迄今爲止我所擁有的。set_union關於任意結構 - 我哪裏出錯了?
我的結構:
struct player {
int lbl;
int lbl1;
bool operator<(const player &t) const {
return (lbl < t.lbl && lbl1 < t.lbl);
}
};
定義在我的結構,即一個球員<運營商比其他球員「小」如果它的兩個標籤(整數)的比其他玩家的標籤更小。
然後執行我這樣做的set_union:
player p1;
p1.lbl = 1;
p1.lbl1 = 3;
player p2;
p2.lbl = 3;
p2.lbl1 = 5;
player p3;
p3.lbl = 2;
p3.lbl1 = 8;
player p4;
p4.lbl = 1;
p4.lbl1 = 7;
vector<player> v1;
vector<player> v2;
v1.push_back(p2);
v1.push_back(p1);
v2.push_back(p3);
v2.push_back(p4);
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
vector<player> v;
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(),
back_inserter(v));
for(int i = 0; i < v.size(); i++) {
cout << v.at(i).lbl << ", " << v.at(i).lbl1 << endl;
}
它打印:
1, 3
3, 5
時候應該已經印
1, 3
3, 5
2, 8
1, 7
,因爲它的成立工會。我可能在結構定義的某個地方出錯了?同樣的set_union對字符串和整數的向量都有效,所以它可能是我的玩家結構?
謝謝。
附加代碼
我的實際結構的代碼是下面(與由納瓦茲建議更正)。我最初發布的簡化版本,但我可能需要張貼這一切:
struct player {
int i;
int lbl;
int lbl1;
argument argu;
string player_name;
player(string player_name);
bool operator<(const player &t) const {
if (lbl != t.lbl)
return lbl < t.lbl;
return lbl1 < t.lbl1;
}
};
不要附加問句C++和C ...他們是兩種不同的語言,並且更加容易,當你選擇一個或另一個(使用雖然你可以* *代碼都是理論上的)。 – 2011-06-09 19:47:30