我想编写一个程序,在数组中存储2个数字的总和,并按生成顺序检索它。我知道map会按排序顺序存储密钥。 Unordered_map按顺序存储密钥,该顺序绝对不是基于生成顺序。
有什么方法可以使用STL来获得我想要的c ++? 以下是我的程序代码。我需要找到一个包含4个数字的数组,其中A + B = C + D,这样所有数字都是唯一的,并按字典顺序排序。
数组= 1 3 3 3 3 2 2 我应该得到0 1 6 7作为输出,但我得到1 5 2 6。
vector<int> Solution::equal(vector<int> &A) {
vector<int> result;
unordered_map<int,vector<vector<int>>> hash;
int n = A.size();
for(int i = 0; i < n ; i++) {
for(int j = i+1; j < n; j++) {
int sum = A[i] + A[j];
vector<int> temp{i,j};
if (hash.find(sum) != hash.end()) {
hash[sum].push_back(temp);
}
else
hash.insert(make_pair(sum,vector<vector<int>>{temp}));
}
}
for(unordered_map<int,vector<vector<int>>>::iterator it=hash.begin(); it != hash.end(); it++) {
int size = it->second.size();
bool found = 0;
if( size > 1) {
for(int i = 1; i < size; i++) {
cout<<it->first<<" ";
if (it->second[0][0] == it->second[i][0] || it->second[0][1] == it->second[i][0] || it->second[0][1] == it->second[i][1]) continue;
result.push_back(it->second[0][0]);
result.push_back(it->second[0][1]);
result.push_back(it->second[i][0]);
result.push_back(it->second[i][1]);
found = 1;
break;
}
if (found) break;
}
}
return result;
}