如何实现mysql的DISTINCT关键字以使用线程并行获取不同的值

时间:2012-03-26 20:11:24

标签: c++ mysql parallel-processing

我想使用hashmap或unordered_map在c ++中创建mysql的功能DISTINCT关键字。

我必须并行执行此操作,例如最初我在数组中输入整数。

现在我必须在数组中找到不同的数字(并行)

2 个答案:

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