対ベクターは、私は次のようにオブジェクトを生成し、工場へのアクセスがあります。はポインタなしコンテナ内のオブジェクトを変更します。セット
A a = factory.build();
を、私は、コンテナ内のタイプA
のオブジェクトを格納してアクセス、変更したいですそれらの内部状態と次のオブジェクトは、以前と同じオブジェクト(変更された状態)にアクセスしたいと思います。 私の最初の考えは、A
へのポインタをコンテナに格納することでした。しかし、上記のように、ファクトリはオブジェクトへのポインタではなく、オブジェクト自体を指しています。
クラスA:
class A
{
private:
int id;
public:
A(int id)
{
this->id = id;
}
int getId() const
{
return id;
}
void setId(int id)
{
this->id = id;
}
};
私はvector
を使用して、次の作品ということを考え出し:
A obj1(1);
std::vector<A> vec;
vec.push_back(obj1);
A & obj = vec[0];
obj.setId(4);
for(std::vector<A>::iterator itr = vec.begin();itr!=vec.end();itr++)
{
std::cout << (*itr).getId() << endl;
}
これは修正IDを出力します。4.
はstd::set
を使用して可能似たようですか?私は、次のことを試してみました:
struct AComp
{
bool operator()(const A lhs, const A rhs) const
{
return (lhs.getId() < rhs.getId());
}
};
と
A obj2(1);
std::set<A, AComp> mySet;
mySet.insert(obj2);
int id = 1;
auto result = std::find_if(mySet.begin(), mySet.end(), [id](A a) {return a.getId() == id;});
A tmp = *result;
tmp.setId(4);
std::cout << tmp.getId() << endl;
for(std::set<A>::iterator itr = mySet.begin(); itr!=mySet.end();itr++)
{
std::cout << (*itr).getId() << endl;
}
これがセットにオブジェクトの状態を変更しません。
binding ‘const hallo2::A’ to reference of type ‘hallo2::A&’ discards qualifiers
どのように私はstd::set
でこれを達成するであろう。しかし、ここで私は、これは私与え
A & tmp = *result;
を言うことができませんか?
セットに含まれるオブジェクトを変更できるかどうかを確認する場合は、答えは「いいえ」です。 –