LINUX.ORG.RU

cвязанн?й список?


0

0

Вот например, есть такое:

223 "alpha"

123 "beta"

345 "gamma"

Надо по номеру(ключ) в?таскивать стрингов?е значения.

Можно пример, как ето профессионально сделать?

Спасибо.

anonymous

Ответ на: комментарий от lg

>array[223] - что бы вытащить "alpha", я думаю это профессионально
А если у него всего их 3 значения? Ему прийдётся массив из непонятно
скольки элементов делать что ли?

RomanU
()
Ответ на: комментарий от RomanU

В perle это очень просто сделать:

#!/usr/bin/perl -w

%hash=(223 => "alpha" ,

123 => "beta" ,

345 => "gamma");

foreach $key (keys %hash)
{
print "$key => $hash{$key}\n";
}

выдает:

345 => gamma
123 => beta
223 => alpha

anonymous
()

Если это С++, то стоит использовать map из STL.

Dead ★★★★
()

можно так (c++)

#include <map>// шаблоный класс из stl -> листинги об ошибках будут километровые (если будут ошибки)

#include <iostream>

int main ()
{
std::map<int,std::string> Map;

Map[223] = "alpha";//может быть надо написать std::string("alpha") для явного указания преобразования типа или вроде можно так std::static_cast<string>("alpha"); немогу проверить комп не мой.
Map[123] = "beta";
Map[345] = "gamma";

// Чтение

std::cout << Map[223] << std::endl;

return 0;
}

К стати #include<map> легко меняется на #include<hash_map> и пожайлуста тоже что на перле (хотя мне свойственно ошибаться)

но подводный камень в том что sdt::string не может по умолчанию использоваться в hash_map т.к. она требует функцию Hash (третьим параметром т.е. hash_map<std::string,int,Hash()> но при hash_map<int,std::string> все в порядке т.к. по умочанию хеш функция создаётся для базового типа int.

Для подробностей смотри книги издательсва Питер книга содержит слово STL. Или книгу Бьерна Страуструпа "Язык программирования с++" очень полезная книг но для новичка тяжеловата.

art_corp
()
Ответ на: комментарий от anonymous

также нужно включить #include <string>

а также несколько слов об STL и hash_map (она не поддерживается стандартом т.к. просто не успели включить).

art_corp
()

Зачем столько гимороя с c++ есть же C объявляешь корень например так struct rs { char *str; int p0; ... rs *next; }; rs * r = 0;

и добавляешь новый if(!r) { r = (rs*)malloc(sizeof(rs)); } else { for(k = r; k; k = k->next) k->next = (rs*)malloc(sizeof(rs)); } это самый быстрый код быстрей только на Assembler

hanprog
()
Ответ на: комментарий от hanprog

>Зачем столько гимороя с c++ есть же C объявляешь корень например так >struct rs { char *str; int p0; ... rs *next; }; rs * r = 0;

>и добавляешь новый if(!r) { r = (rs*)malloc(sizeof(rs)); } else { for(k >= r; k; k = k->next) k->next = (rs*)malloc(sizeof(rs)); } это самый >быстрый код быстрей только на Assembler

А искать в этом списке как будете? Последовательным перебором? нуну...

С hash_map то побыстрее будет, и ассемблер тут не поможет :)

NewComer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.