c++ - value_type - std::map 使い方




std:: mapキーとしてstd shared_ptrを使用 (2)

放浪していた - マップキーとしてstd::shared_ptrを使用できますか?

より具体的には - ポインタの参照カウンタは、マップに割り当てられたときに持っていた値とは異なるかもしれません。

地図で正しく識別されますか。


はい、できます…しかし注意してください。 operator<はポインターに関して定義されており、指示されたものに関しては定義されていません。

#include <memory>
#include <map>
#include <string>
#include <iostream>

int main() {

    std::map<std::shared_ptr<std::string>,std::string> m;

    std::shared_ptr<std::string> keyRef=std::make_shared<std::string>("Hello");
    std::shared_ptr<std::string> key2Ref=std::make_shared<std::string>("Hello");

    m[keyRef]="World";

    std::cout << *keyRef << "=" << m[keyRef] << std::endl;
    std::cout << *key2Ref << "=" << m[key2Ref] << std::endl;

}

版画

Hello=World
Hello=

はい、できます。 std::shared_ptrは、マップキーの使用に適した方法で定義されたoperator<持ちます。 具体的には、参照カウントではなく、ポインター値のみが比較されます。

明らかに、尖ったオブジェクトは比較の一部ではありません。 それ以外の場合は、先のとがったオブジェクトを変更してマップ内の順序を比較と矛盾させることで、マップを簡単に無効にすることができます。





std