トップページ > プログラム > 2016年07月20日 > /LEefS5m

書き込み順位&時間帯一覧

7 位/150 ID中時間01234567891011121314151617181920212223Total
書き込み数0000100000000000002100004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【初心者歓迎】C/C++室 Ver.98【環境依存OK】 [無断転載禁止]©2ch.net

書き込みレス一覧

【初心者歓迎】C/C++室 Ver.98【環境依存OK】 [無断転載禁止]©2ch.net
955 :デフォルトの名無しさん[sage]:2016/07/20(水) 04:52:43.46 ID:/LEefS5m
setとかをiterator itrで回してて、x=*itrでxを定義したらやっぱりコピーなんですかね?
参照になってほしいんですが、&x=*itrてしたらVisual Studioに怒られます
【初心者歓迎】C/C++室 Ver.98【環境依存OK】 [無断転載禁止]©2ch.net
963 :デフォルトの名無しさん[sage]:2016/07/20(水) 18:12:57.01 ID:/LEefS5m
エスパーさせて申し訳ないです
例えば下記のような自作クラスMyClassのunordered_setを作って、それぞれの要素のprivateメンバー変数NUMBERSをループの中で変えたいです
main部は次のレスに書きます

class MyClass
{
public:
MyClass() {}
set<int>& numbers() { return NUMBERS; }
void add_to_numbers(int x) { NUMBERS.insert(x); }
void set_hash() { identity = *(NUMBERS.begin()); }
int hash() const { return identity; }
bool operator==(const MyClass& c) const { return identity == c.hash(); }

private:
set<int> NUMBERS;
int identity;
};

namespace std
{
template<>
class hash<MyClass>
{
public:
size_t operator()(const MyClass& c) const
{
return c.hash();
}
};
}
【初心者歓迎】C/C++室 Ver.98【環境依存OK】 [無断転載禁止]©2ch.net
964 :デフォルトの名無しさん[sage]:2016/07/20(水) 18:14:02.75 ID:/LEefS5m
mainです。コピーの操作になってしまうので結果は変わりませんでした。
>>958のようにMyClass m = *itr;をMyClass const& m = *itr;とすると
エラー:オブジェクトにメンバー関数と互換性のない型修飾子がありますオブジェクト型はconst MyClassです
と出ます。どうしたら参照でループさせて直接書き換えられるか教えて下さいお願いします
int main(){
unordered_set<MyClass> M;
MyClass m[10];
for (int i = 0; i < 10; i++) { m[i].add_to_numbers(i); m[i].set_hash(); M.insert(m[i]); }
cout << "初期状態" << endl;
for (auto m : M)
{
cout << "要素: ";
for (auto elem : m.numbers())
cout << elem << ",";
cout << endl;
}
cout << "\n要素操作" << endl;
int count = 1;
for (auto itr = M.begin(); itr != M.end(); itr++){
MyClass m = *itr;
m.add_to_numbers(count);
m.set_hash();
count++;
}
for (auto m : M){
cout << "要素: ";
for (auto elem : m.numbers())
cout << elem << ",";
cout << endl;
}
return 0;
}
【初心者歓迎】C/C++室 Ver.98【環境依存OK】 [無断転載禁止]©2ch.net
969 :デフォルトの名無しさん[sage]:2016/07/20(水) 19:00:21.11 ID:/LEefS5m
なるほどそうですか
hashが変わるようなことできないようになってるんですね
じゃあコピーを操作して手動で入れ替えるしかないですね


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。