1. ホーム
  2. c++

[解決済み] iterator->secondの意味は何ですか?

2022-04-21 07:10:02

質問

C++の場合、型は何ですか? std::map<>::iterator ?

オブジェクトが it 型の std::map<A,B>::iterator はオーバーロードされた operator -> を返します。 std::pair<A,B>* であること、そして std::pair<> があります。 firstsecond メンバになります。

しかし、この2つのメンバーは何に対応し、なぜマップに格納された値にアクセスするために it->second ?

解決方法は?

をご存じだと思います。 std::vector<X> を大量に保存しています。 X オブジェクトがありますよね?しかし、もしあなたが std::map<X, Y> の束を格納することになりますが、実際に格納されるのは std::pair<const X, Y> s. これがマップの正体で、キーと関連する値のペアリングを行います。

を反復処理する場合 std::map のすべてに対して反復していることになります。 std::pair s. これらのイテレータの1つをデリファレンスすると、そのイテレータは std::pair は、キーとそれに関連する値を含む。

std::map<std::string, int> m = /* fill it */;
auto it = m.begin();

ここで、もしあなたが今 *it が表示されます。 std::pair をマップの最初の要素に指定します。

今度はタイプ std::pair は、2つのメンバを通じてその要素にアクセスすることができます。 firstsecond . ですから、もしあなたが std::pair<X, Y> という p , p.firstX オブジェクトと p.secondY オブジェクトを作成します。

をデリファレンスすることがわかりましたね。 std::map イテレータは std::pair を使用すると、その要素にアクセスすることができます。 firstsecond . 例えば (*it).first はキーを与え (*it).second は値を与えます。これらは、次のものと同じです。 it->firstit->second .