0

より明確なコードに変更したコードがあります。ここにあります:

map <TwoWayHostPair, Traffic> traffic;
static map <TwoWayHostPair, Traffic>::iterator trafficItr;

trafficItr = traffic.find(hostPair);
if (trafficItr == traffic.end()) { 
      trafficItr = traffic.insert(make_pair(hostPair, Traffic())).first;
}

これはコード全体ではありません。これはコードのほんの一部です。だから、コンパイルすることは答えではありません。今はコンパイルします

traffic.firstclass の属性ですTwoWayHostPairif(trafficItr == traffic.end())if trafficItris not equal to trafficwhich が正しくない可能性があることを意味すると思います。

私の主張が正しいかどうか誰か知っていますか?また、それが真の場合、いつtrafficItrと等しいtraffic結果が得られますか? のようなものですかtrafficItr == traffic.begin()

4

1 に答える 1

2

これは正しいc++コードではありません。findマップ内の要素へのイテレータを返します。要素が見つからない場合は終了イテレータを返します。find の結果にマップを割り当てると、コンパイルされません。また、マップを別のマップの終了イテレータと比較することはできません。また、TwoWayHostPair のインスタンスまたはそのようなインスタンスに変換可能なものを見つけるために渡す必要があることに注意してください。

次のようなコードのアイデア:

map <TwoWayHostPair, ClassA> variableA, variableB;
//variableA is set to a proper value

map <TwoWayHostPair, ClassA>::iterator iter;
iter = variableB.find(TwoWayHostPair_instance)

if(iter == variableB.end())
     //do something

要素がマップに見つからない場合にのみ処理を行います。

于 2013-01-05T12:57:20.933 に答える