我想使用hashmap或unordered_map在c ++中创建mysql的功能DISTINCT关键字。
我必须并行执行此操作,例如最初我在数组中输入整数。
现在我必须在数组中找到不同的数字(并行)
答案 0 :(得分:1)
如果原始数组没有更改并假设g++
的可用hash_map
扩展名为:
hash_map<int, int> distinct_elems;
for (int i = 0 ; i < num_elems ; ++i)
{
distinct_elems[i] = i;
}
由于基础数据没有改变,distinct_elems
也不会改变,因此代码:
hash_map<int, int>::iterator de_itr;
for( de_itr = distinct_elems.begin() ; de_itr != distinct_elems.end() ; ++de_itr)
{
print("%d\n", de_itr->second);
}
或者如果您只是想在hashmap中查找值:
hash_map<int, int>::iterator de_itr = distinct_elems.find(value);
if(de_itr != distinct_elems.end())
{
<do some work>
}
您可以从没有锁定的任意数量的线程执行此操作,因为数据现在基本上是不变的。
答案 1 :(得分:0)
使用hashmap并将所有整数放在数组中。但是在将它们添加到地图之前添加额外的检查,以便在存在时不再添加它们。最后,遍历地图中的所有整数,您就拥有了唯一的项目:
伪代码:
for (int i=0..array.length){
if (hashmap.contains(array[i]) continue;
hashmap.put(i,i);
}
for (iterator over map) {
print("unique values: " + *it)
}