Conversation
| * 追記: | ||
| * いや、参照 (かポインタ) を引数に渡せばコピーはされないのか。 | ||
| * 参照渡しをする、しないによるコピー (引数に渡す時のコピー) と RVO のとき問題になっているコピーを同一視してしまっていた気がする。 | ||
| * 前者は、ポインタか参照を関数の引数に渡せばよい。 | ||
| * 後者は値を返すときにコピーされる問題で、嫌なら最初から書き込み先のアドレスを渡して関数内でそこに書いていくか、あるいは (N)RVO が効くことを期待するか | ||
| * …という理解であっているかな。 |
|
少し重いですが、ソート後に比較する書き方もできますかね。 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 みたいに書けることを知った。 |
There was a problem hiding this comment.
Structured binding で C++17 からで比較的新しい機能です。
なんとなくいつから入ったかは意識しておくといいかと思います。
There was a problem hiding this comment.
ありがとうございます。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 が返るっぽいので、こんな感じでアクセスする。可読性が低い気がするが慣れの問題? |
There was a problem hiding this comment.
Ranged for と auto の入る C++11 以前だとイテレータを型から書いていました。そういう歴史的経緯があります。
いえいえ、全く問題ありません。むしろありがたいです。C++ のソートって、iterator の頭と末尾を引数に取るので、コンテナ自体を引数に取る Python より面倒だなーくらいのことは考えていました。 |
242. Valid Anagram
https://leetcode.com/problems/valid-anagram/