c++ - 将多个元素添加到 map<pair> c++

标签 c++ dictionary

struct re_use_dist
{
 uint32_t set;
 uint32_t way;
 uint32_t rdx;
}reusedist;

map<pair<int, int>, int> myMap;
myMap[make_pair(reusedist.set,reusedist.way)] = reusedist.rdx;

我以结构的形式从文件中读取数据并添加到 map 中。

有没有办法将多个 rdx 添加到 myMap?这样它只存储最后一个。

最后,我想为每个 setway 计算连续 rdx 的差异

谢谢!

int difference = 0;
    int test = 0;
    int primary = 0;
    int secondary = 0;
    float average = 0;
    vector<int> rd;
    for(multimap<pair<int, int>,int>::iterator st=myMap.begin(), end=myMap.end();st!=end;st++)
    {
        std::cout<<st->first.first<<" "<< st->first.second<<" "<<st->second<<endl;
        if(primary != st->first.first && secondary != st->first.second){
            vector<int>::size_type taille = rd.size();
            double sum = 0;
            for(vector<int>::const_iterator i = rd.begin(); i!=rd.end(); ++i)
            {
                sum+=*i;
            }
            average = sum/taille;
            cout<<primary<<" "<<secondary<<" "<<average<<endl;
            primary  = st->first.first;
            secondary = st->first.second;
            exit(0);
        }
        difference = st->second - test;
        rd.push_back(difference);
    //  cout<<difference<<endl;
        test = st->second;
        primary = st->first.first;
        secondary = st->first.second;
        cout<<primary<<" "<<secondary<<endl;
    }

最佳答案

std::multimap<pair<int, int>, int> myMap;
myMap.insert(make_pair(make_pair(reusedist.set, reusedist.way), reusedist.rdx));

求连续rdx的不同:

for (std::multimap<pair<int, int>, int>::const_iterator i = myMap.begin(); i != myMap.end(); ) {
    pair<int, int> key = i->first;
    std::multimap<pair<int, int>, int>::const_iterator rbound = myMap.upper_bound(key);
    std::multimap<pair<int, int>, int>::const_iterator j = i, k = i;
    ++k;
    for (; k != rbound; j = k, ++k) {
        int difference = k->second - j->second;
    }
    i = rbound;
}

另一种方法:map<pair<int, int>, vector<int> > .

map<pair<int, int>, vector<int> > myMap;
myMap[make_pair(reusedist.set, reusedist.way)].push_back(reusedist.rdx);

for (map<pair<int, int>, vector<int> >::const_iterator i = myMap.begin(); i != myMap.end(); ++i) {
    pair<int, int> key = i->first;
    const vector<int> &rdxes = i->second;
    for (vector<int>::const_iterator j = rdxes.begin(); j+1 != rdxes.end(); ++j) {
        int difference = *(j+1) - *j;
    }
}

关于c++ - 将多个元素添加到 map<pair> c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22164284/

相关文章:

c# - 如何在 Web 应用程序中使用 native 库方法?

c++ - 使用 C++ 在 OpenGL 中使用键盘移动 3D 形状

c++ - 在列表中向下移动一个元素 C++

python - 构建 JSON 格式时出现问题。在字典和集合之间选择?

Java:根据内部映射对Map进行排序,Map<Long,Map<String, Data>>

c++ - SFML - 窗口调整大小后的中心 View

c++ - "new"operator in multiple threads cause Segmentation Fault

java - 如何使用 Gson API 提取复杂嵌套 json 结构的特定键值对

R - 根据键值对替换数据框列中的所有值

python - 2.7.10 和 2.7.13 之间 dict.viewkeys() 和元组之间交集行为的差异