【发布时间】:2021-10-08 17:25:34
【问题描述】:
给出map<long long, vector<long long>> 形式的映射。必须将所有键和值取模某个整数N。一些键可以合并,相应的值必须相应地加入。例如,映射{{1,{2,6,4}}, {5,{8,4,9}}, {10,{5,1,7}}} 应该等于{{1,{2,1,4}}, {0,{0,1,2,3,4}}} 减少模5。
我的方法是使用新地图,但我认为应该有更好的方法。
添加代码
vector<long long> tmp;
//integer N, for example N = 5
int N = 5;
unordered_map<long long, vector<long long>> map;
//temporary map
unordered_map<long long, vector<long long>> map_tmp;
for (auto & x : map)
{
tmp.clear();
for (auto & y : x.second) tmp.push_back(y % N);
ind = x.first % N;
map_tmp[ind].insert(map_tmp[ind].end(), tmp.begin(), tmp.end());
sort(map_tmp[ind].begin(), map_tmp[ind].end());
map_tmp[ind].erase(unique(map_tmp[ind].begin(), map_tmp[ind].end()), map_tmp[ind].end());
}
map = map_tmp;
【问题讨论】:
-
您可以使用 C++17 或更高版本吗?
-
这对
std::transform来说似乎是一个沉重的负担。无论如何,如果您有工作 代码并且想知道如何改进它,这是code review 的问题。但请务必查看如何提问,因为特别是您需要发布代码,而不是非常简短的代码高级摘要。 -
你做了什么?我看到了任务描述,但没有尝试解决它。
-
“应该相等”是否包括向量元素的顺序?
-
地图中的键是
const,至少你需要创建新元素,然后我看不到创建新地图的优势
标签: c++ unordered-map