Как я могу реализовать ключевое слово DISTINCT mysql, чтобы получить различные значения параллельно, используя потоки - PullRequest
0 голосов
/ 27 марта 2012

Я хотел бы создать функциональное ключевое слово DISTINCT для mysql в c ++, используя hashmap или unordered_map.

Я должен сделать это параллельно, например, изначально у меня есть входные целые числа в массиве.

Теперь я должен найти отличное число в массиве (параллельно)

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Если исходный массив не изменяется и предполагается наличие доступного расширения 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);
}

или, если вы просто хотите посмотреть значение в хэш-карте:

hash_map<int, int>::iterator de_itr = distinct_elems.find(value);
if(de_itr != distinct_elems.end())
{
    <do some work>
}

Вы можете сделать это из любого количества потоков без блокировки, поскольку данные теперь в основном постоянны.

0 голосов
/ 27 марта 2012

Используйте 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...