2

私はこのような地図を持っています:

typedef std::map<std::string, Copied_Instrument_Data> InternalIdWise_Copied_Instrument_Data;

ここで、Copied_Instrument_Dataは構造体です:

typedef struct 
{
    std::string type;
    std::string marketListId;
    std::string sectorCode;
    std::string validToDate;
    int notificationType;
    bool npgFlag;
}Copied_Instrument_Data;

次を使用してマップにデータを挿入しました。

InternalIdwise_Copied_Instrument_Data__Map.insert( std::pair<std::string, Copied_Instrument_Data >(internalId, CID) );

CID はCopied_Instrument_Data構造変数です。

後で私は使用しました:iter = InternalIdwise_Copied_Instrument_Data__Map.find("SomeKeyString");

次のように宣言した後iterInternalIdWise_Copied_Instrument_Data::iterator iter;

で、〜がある :

if (iter != InternalIdwise_Copied_Instrument_Data__Map.end() )
        Instrument_available = true;
if (Instrument_available == true)
{
        ins_todate = *(iter).second.validToDate;
       std::cout<<ins_todate; 
}

しかし、これは機能しません。でデータを取得していませんins_todate

だから、私の質問は:

その要素に正しくアクセスする方法は?

4

2 に答える 2

4

それは演算子の優先順位と関係があります:

ins_todate = *(iter).second.validToDate;

参照解除演算子 on を使用しますiter.second.validToDate(参照解除 ( *) 演算子は、要素選択 ( .) 演算子よりも優先順位が低くなります)。

やったほうがいい

ins_todate = (*iter).second.validToDate;

また

ins_todate = iter->second.validToDate;
于 2013-03-27T15:37:55.007 に答える
1

答えではありませんが、ここでのコーディングスタイルへの提案:

I. C++ を書いている場合は、次のことを行う必要があります。

struct Copied_Instrument_Data
{
    ...
};

それ以外の

typedef struct 
{
    ...
} Copied_Instrument_Data;

後者は un-named を与えてstructからそれを与えますtypedefが、これは不要であり、 this で前方宣言を使用することはできませんstruct

Ⅱ.要素をマップに挿入するために使用できますstd::make_pair。個人的には、より明確で簡単だと思います。

Map.insert( std::make_pair(internalId, CID) );

III. フラグのみの場合、一時変数を置き換える必要があります。

if (iter != InternalIdwise_Copied_Instrument_Data__Map.end() )
        Instrument_available = true;
if (Instrument_available == true)
{
    ...
}

する必要があります

if (iter != InternalIdwise_Copied_Instrument_Data__Map.end())
{
    ...
}

または、これは、false 条件を除外する return 呼び出しによって行われる場合があります。

if (iter == InternalIdwise_Copied_Instrument_Data__Map.end())
{
    // print some error log?
    return;
}

// continue your work!

( Refactoring: Impriving the design of existing code, 2nd Ed., Item 6.3 Inline Tempを参照できます)

それが役立つことを願っています! :)

于 2013-03-28T02:14:30.647 に答える