0
typedef std::pair<int, bool> acq_pair; //edge, channel_quality
typedef std::pair<int, acq_pair> ac_pair;
typedef std::multimap<int, acq_pair> ac_map;
typedef ac_map::iterator It_acq;


int bits = acq_map.size();
std::cout << "bits = " << bits << std::endl;

std::vector<std::vector<bool> > c_flags (1 << bits);

for (i = 0; i < c_flags.size(); ++i)
{
    for (j = 0; j < bits; ++j)
    {
        c_flags[i].push_back( (i & (1 << j)) > 0);      
    }           
}

std::cout << "c_flags.size() = " << c_flags.size() << std::endl;

for(i = 0; i < c_flags.size(); ++i)
{
    for(j = 0; j < bits; ++j)
    {
        std::cout << c_flags[i][j] << std::endl;

        for(It_acq itc = acq_map.begin(); itc!= acq_map.end(); ++itc)
        {
            acq_pair it1 = itc->second;
            itc->second.second = c_flags[i][j];
            std::cout << itc->first << " : " << it1.first << " : " << it1.second << std::endl;
        }
    }   
    std::cout << "\n" << std::endl;
}

マルチマップ コンテナから一度に 1 つのアイテムだけにアクセスするにはどうすればよいですか? マップ内の j 番目の値のみを更新したいのですが、マップを反復処理すると、すべてのブール値が変更されます。マップ コンテナー値にアクセスする選択的な方法はありますか?

4

1 に答える 1

1

itc->second.second = c_flags[i][j];begin()からend()までitcを使用してループで実行される行は、実際にマップのすべての値への割り当てを実行します。マップ内のj番目の値のみを変更することが目標である場合、マップ全体をループする必要はありませんでした。

    for(size_t j = 0; j < bits; ++j)
    {
        std::cout << c_flags[i][j] << std::endl;

        It_acq itc = acq_map.begin(); // itc points at the beginning
        advance(itc, j); // itc points at the j'th element
        itc->second.second = c_flags[i][j]; // the assignment

        for(It_acq itc = acq_map.begin(); itc!= acq_map.end(); ++itc)
        {
            acq_pair it1 = itc->second;
//            itc->second.second = c_flags[i][j];   // no assignment here
            std::cout << itc->first << " : " << it1.first << " : " << it1.second << std::endl;
        }
    }

ただし、このマップをこのようにインデックス付きアクセスに使用する場合は、ベクターへの切り替えを検討する価値があります。

于 2010-06-29T19:31:08.740 に答える