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)
答案 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