//找出两个数的和等于指定的T的所有组合
//塞入unordered_map里面 数组元素值, 对应的下标 遍历每个元素,找出需要的差值是否存在,且满足第二个数 大于等于第一个数,防止重复
/*
已知一个数是一个数组中两个数据之和,找出这个数组中某一对符合条件的数
例如:a[]={1,2,3,5,8} n=10,则输出{2,8}
*/
#include <unordered_map>
vector<pair<int, int>> find2T(int* data, int len, int T)
{
unordered_map<int, int> map_data;
vector<pair<int, int>> result;
for (int i = 0; i < len; i++)
{
map_data.insert(make_pair(data[i], i));//map_data.insert(data[i], i) 编译不过
}
for (int i = 0; i < len; i++)
{
int diff = T - data[i];
unordered_map<int, int>::iterator pos = map_data.find(diff);
if (pos != map_data.end() && (map_data[diff] >= i))
{
result.push_back( make_pair(i, map_data[diff]) );
}
}
for (int i = 0; i < result.size(); i++)
{
cout << result[i].first << " " << result[i].second << endl;
}
return result;
}
int num_data[10] = { 1, 3, 2, 5, 4, 7, 6, 8, 9, 0 };
find2T(num_data, 10, 5);