1

私は持っていmap<int, map<int, int>>ます。

最初のキーはノードを表し、2 番目のキーは属性を表し、「最も深い」要素は特定の値を表します。

その要素を確認する必要がありますが、次の不要な操作を行うと、マップにキーが追加されます。

map<int, map<int, int>> test;
if (test[4][3] > 5)
{
    //do something
}

私が考える代替案は

map<int, map<int, int>> test;
if (test.find(4) != test.end())
{
    if (test[4].find(3) != test[4].end())
    {
        if (test[4][3] > 5)
        {
            //do something
        }
    }
}

これを行うより良い方法はありますか?マップにキーが存在するかどうかはわかりませんが[4][3]、不必要に追加したくありません。ありがとう!

4

3 に答える 3

3

これは機能するはずです-最初に最初のマップを検索し、返されたイテレータを保存します。次に、そのイテレータが有効な場合は、彼が指しているマップを検索し、結果を別のイテレータに保存します。有効な場合、それはあなたが探しているオブジェクトを意味します存在し、その値を確認するだけです:

map<int, map<int, int>> test;
map<int, map<int, int>>::iterator it1;
map<int, int>::iterator it2;
if ((it1 = test.find(4)) != test.end())
{
    if ((it2 = it1->second.find(3)) != it1->second.end())
    {
        if (it2->second > 5)
        {
            //do something
        }
    }
}
return 0;
于 2013-06-20T08:17:26.323 に答える
0

これにより、何が起こっているのかを少し簡単に確認できると思います。

map<int, map<int, int>> test; 
map<int, map<int, int>>::iterator outer = test.find(4);
if (outer != test.end())
{
    map<int, int>::iterator inner = outer->second.find(3);
    if (inner != outer->second.end())
    {
        if (inner->second > 5)
        {
            //do something
        }
    }
}
return 0;
于 2013-06-20T08:28:37.187 に答える