Skip to content

242. Valid Anagram#7

Open
ryosuketc wants to merge 2 commits intomainfrom
242_valid_anagram
Open

242. Valid Anagram#7
ryosuketc wants to merge 2 commits intomainfrom
242_valid_anagram

Conversation

@ryosuketc
Copy link
Owner

Comment on lines +87 to +92
* 追記:
* いや、参照 (かポインタ) を引数に渡せばコピーはされないのか。
* 参照渡しをする、しないによるコピー (引数に渡す時のコピー) と RVO のとき問題になっているコピーを同一視してしまっていた気がする。
* 前者は、ポインタか参照を関数の引数に渡せばよい。
* 後者は値を返すときにコピーされる問題で、嫌なら最初から書き込み先のアドレスを渡して関数内でそこに書いていくか、あるいは (N)RVO が効くことを期待するか
* …という理解であっているかな。
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#3
あたりでポインタと参照を見ていたら勘違いしている気がしてきたので追記

@Apo-Matchbox
Copy link

少し重いですが、ソート後に比較する書き方もできますかね。
https://en.cppreference.com/w/cpp/algorithm/sort.html

class Solution {
 public:
  bool isAnagram(string s, string t) {
    if (s.size() != t.size()) return false;
    sort(s.begin(), s.end());
    sort(t.begin(), t.end());
    return s == t;
  }
};

よくよく確認したら、memo.mdでコメント残されてましたね。
お腹いっぱいな所に追加しちゃう形となりすいません。。。

* `std::unordered_map::count`、そもそもキーがユニークなんだから意味ある?と思った。使い所はよくわからんけど (`mulptimap`?あたりとインターフェース揃えるためなのかな)
* `Solution`
* `map` に対する for 文をどう書くのがいいか苦闘した。
* 他の解答も眺めて `for (const auto& [s_char, s_char_count] : s_char_to_count)` で Python の unpack みたいに書けることを知った。
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Structured binding で C++17 からで比較的新しい機能です。
なんとなくいつから入ったかは意識しておくといいかと思います。

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。structured binding というんですね。
https://cpprefjp.github.io/lang/cpp17/structured_bindings.html

* `map` に対する for 文をどう書くのがいいか苦闘した。
* 他の解答も眺めて `for (const auto& [s_char, s_char_count] : s_char_to_count)` で Python の unpack みたいに書けることを知った。
* const 参照で受けるべきか値で受けるべきかまだよくわからん
* そもそも `map` を範囲 for で回すと pair が返るっぽいので、こんな感じでアクセスする。可読性が低い気がするが慣れの問題?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ranged for と auto の入る C++11 以前だとイテレータを型から書いていました。そういう歴史的経緯があります。

@ryosuketc
Copy link
Owner Author

ryosuketc commented Aug 18, 2025

少し重いですが、ソート後に比較する書き方もできますかね。 https://en.cppreference.com/w/cpp/algorithm/sort.html

class Solution {
 public:
  bool isAnagram(string s, string t) {
    if (s.size() != t.size()) return false;
    sort(s.begin(), s.end());
    sort(t.begin(), t.end());
    return s == t;
  }
};

よくよく確認したら、memo.mdでコメント残されてましたね。 お腹いっぱいな所に追加しちゃう形となりすいません。。。

いえいえ、全く問題ありません。むしろありがたいです。C++ のソートって、iterator の頭と末尾を引数に取るので、コンテナ自体を引数に取る Python より面倒だなーくらいのことは考えていました。
一方で、最後 s == t で終わりという想定をしていなかった (for でループして確認するだろうなと思っていて、その発想がなぜかなかった) ので参考になりました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants