将vector的std :: map的值计算为key并将double作为值计算?

时间:2018-03-29 05:58:47

标签: c++ vector stdvector stdmap

 std::map<std::vector<double>, double> MyMethod(std::map<std::vector<double>, double> mappingSourceToTarget, int radius)
{
    std::map<std::vector<double>, double> mappingSourceToTargetNew(mappingSourceToTarget);
    std::map<std::vector<double>, double>::iterator it_trgt,it_src;
    double sumOfNormals1 = 0;
    int size = mappingSourceToTarget.size(), i=0;
    for (it_src = mappingSourceToTarget.begin(), it_trgt = mappingSourceToTargetNew.begin(); i < size + (radius * 2) ; i++, it_src, it_trgt++)
    {
        auto elem = mappingSourceToTargetNew;

        if (i == 0)
        {
            //it_trgt->first.at(i % size) = it_src->first.at(i%size);

            mappingSourceToTargetNew.at(i % size) = mappingSourceToTarget.at(i % size);
            sumOfNormals1 += mappingSourceToTarget.at(i % size);

这里我遇到了麻烦,关于如何将值从一个地图放到另一个地图。

我正在使用圆形数组的概念,因此我在这里使用了i%size, 矢量是坐标,double是该点的强度值。

索引的东西不适用于.at(),我真的不知道该做什么

我必须通过仅使用地图(任务)来使其工作。

在索引处将值从一个地图复制到另一个地图(i%size)

1 个答案:

答案 0 :(得分:0)

1)使用迭代器读取键值,即使用第一个/第二个。

2)当迭代器到达结尾时,将其设置为等于begin()。这将像i % size

一样运作

以下是一些展示这个想法的示例代码:

#include <iostream>
#include <map>

int main() {
    std::map<int, int> m {{1, 100}, {2, 200}};
    auto s = m.size();
    std::cout << "size = " << s << std::endl;
    auto i1 = m.begin();
    auto i2 = m.end();
    for (auto i = 0; i < 5; ++i)
    {
        std::cout << "key=" << i1->first << " value=" << i1->second << std::endl;
        ++i1;
        if (i1 == i2)
        {
            // We reached the end so go back to the begining
            i1 = m.begin();
        }
    }
    return 0;
}

<强>输出:

size = 2
key=1 value=100
key=2 value=200
key=1 value=100
key=2 value=200
key=1 value=100