【问题标题】:assign values to selective items using STL multimap使用 STL 多图为选定项目分配值
【发布时间】:2010-06-30 03:39:26
【问题描述】:
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;
}

如何一次只能访问多地图容器中的一项?我只想更新地图中的第 j 个值,但是当我遍历地图时,所有布尔值都被更改了。是否有选择性的方式来访问地图容器值?

【问题讨论】:

    标签: c++ stl multimap


    【解决方案1】:

    在 itc 从 begin() 到 end() 的循环中执行的行 itc-&gt;second.second = c_flags[i][j]; 确实执行了对映射的每个值的分配。如果目标是只修改地图中的第 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;
            }
        }
    

    如果此映射以这种方式用于索引访问,则可能值得考虑切换到矢量。

    【讨论】:

    • 感谢这工作。我使用的是多图,因为键代表图的边和顶点。 bool 值是分配给特定边-顶点组合的权重,之后执行另一个算法。谢谢
    • @vivekv80:有一个图形库 boost.BGL (boost.org/doc/libs/1_43_0/libs/graph/doc/table_of_contents.html),如果这是一个长期项目,它可能会很有用。
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多