我在下面的代碼中創建了一個std::set
,其中元素基於數組進行排序。std :: set元素消失
int weight[] = {0, 1, 58, 21, 10, 21, 24};
struct Comp
{
public:
bool operator() (const int &a, const int &b) const
{
if (weight[a] == weight[b])
return a < b;
else
return weight[a] < weight[b];
}
};
set<int, Comp> s;
令人驚訝地,當我改變任何元件的weight
陣列中,在所述一組相應的元件消失了。這裏是我的測試功能:
void print()
{
printf("Elements = ");
for(int i = 1; i <= 6; i++)
if(s.find(i) != s.end())
printf("%2d ", i);;
printf("\n");
}
int main()
{
for(int i = 1; i <= 6; i++)
s.insert(i);
print();
weight[2] = 1;
weight[5] = 15;
print();
return 0;
}
輸出:
Elements = 1 2 3 4 5 6
Elements = 1 3 4 6
我使用buntu gcc 4.6.3
。
時間來重新生成一組新的,這是爲什麼奇怪? 's.find()'使用你的'weight'數組,所以如果你改變它,你應該期待'find'的行爲不同。 – 2013-04-08 13:23:40
您正在修改組合後的訂購標準。這是行不通的。 – juanchopanza 2013-04-08 13:24:07