struct data
{
int price;
int qty;
bool operator<(const data&rhs)const
{
return price<rhs.price;
}
bool operator==(const data&rhs)const
{
return price==rhs.price;
}
};
set<data> bar;
int main(int argc,char** argv)
{
data info;
set<data>::iterator iter;
int a[10]={100,120,500,142,142,245,62,52,12,1};
for(int i=0;i<10;i++)
{
info.price=a[i];
info.qty=a[i];
//some logic to find the price and if found then simply add the qty
//********This part of the code doesnt work(NO ERROR)*********
iter=bar.find(info);//Find before insert
info.qty+=(*iter).qty;//then add
//******************************************
bar.insert(info);
//code to print the set
}
return 0;
}
価格がすでにset
に存在するかどうかを調べたい場合は、数量を追加します。
set
に142が追加されているので、次の142
がa
にある場合は、それを既存のエントリに追加する必要があります。
私はマップでこれを行う方法を知っているが、それは構造体の集合であるから、私はC++で構造体を検索する
に最終的な所望の出力にそれを操作することはできませんよ。他の人が指摘したように、へのアクセスを
Price...Qty
1...........1
12.........12
52.........52
62.........62
100.......100
120.......120
142.......284 ///Here it finds and then adds the qty
245.......245
500.......500
あなたは単に '' std :: set :: find'(http://en.cppreference.com/w/cpp/container/set/find)を探していると思うか、 'set'に挿入する前の価格(コードコメントのように)' std :: find'を使うことができます( 'set'でも使うことができます) – Tas
' std :: set'の要素はconstです。 'qty'やそれ以外のものを追加することで変更することはできません。あなたができることは、既存の要素を削除し、修正された要素を元に戻すことです。 –
はい、目的の値が挿入されていません。ありがとう。 @IgorTandetnik –