Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2013, 10:10   #61
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
значит ничего не узнал )
посмотри в книжках...например у Скиены, там есть несколько эротичных табличек в которые сведена информация о массивах, векторах, списках, деревьях, сортированных массивах и т.п.
мап - это самобалансирующееся дерево поиска, т.е. поиск за логарифмическое время, но при добавлении и удалении элемента нужна баллансировка, кроме того ты не можешь запросить энный элемент, потому что порядком элементов рулит сам словарь.
лист - динамический неупорядоченный список, время поиска линейное, добавление и удаление - константное (но смотря как напишешь, если перед этим придется искать элемент или искать предыдущий/последующий элемент {если односвязный список} - то тоже линейное), можешь запросить энный элемент (произвольный доступ работает), но получишь его за линейное время.

И Bers_ правильно грит про области приминения, вопрос о том использовать list или map обычно не стоит, хотя...можно придумать )
Но лучше в книжку посмотри )
я знаю что такое лист и мап, а когда учили мап, понял что не буду им пользоваться, но если говорите что он нужен, то когда то может пригодится
_SOKOL_ вне форума Ответить с цитированием
Старый 07.02.2013, 10:46   #62
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от _SOKOL_ Посмотреть сообщение
я знаю что такое лист и мап, а когда учили мап, понял что не буду им пользоваться, но если говорите что он нужен, то когда то может пригодится
У всех твоих сотрудников есть регистрационный код. По этому коду должен быть осуществлен доступ к досье на человека.

Коды могут быть например такие: 0001, 5677, 3402

Как ты будешь хранить информацию о регистрационных кодах, и по ним искать досье на человека?

Ну или тупой пример со словарем:
"Hello" - привет
"world" - мир.

Как ты организуешь хранение данных для словаря, что бы быстро переводить текст?
_Bers вне форума Ответить с цитированием
Старый 07.02.2013, 12:06   #63
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
У всех твоих сотрудников есть регистрационный код. По этому коду должен быть осуществлен доступ к досье на человека.

Коды могут быть например такие: 0001, 5677, 3402

Как ты будешь хранить информацию о регистрационных кодах, и по ним искать досье на человека?

Ну или тупой пример со словарем:
"Hello" - привет
"world" - мир.

Как ты организуешь хранение данных для словаря, что бы быстро переводить текст?
здесь map удобнее всего....
Код:
#include <map>
#include <string>

using namespace std;

void main()
{
	map<string, int, less<string>> a;
	a["Vasia"] = 2031;
	a["Kolia"] = 3214;
	a["Dima"] = 8912;
}
_SOKOL_ вне форума Ответить с цитированием
Старый 07.02.2013, 12:25   #64
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Почти любой пул содержит мап. Будешь ты руками пул потоков писать - будет у тебя мап типа <клиент, поток> или см. паттерн "объектный пул".

Еще его удобно использовать если какие-то данные надо всегда хранить упорядочеными, ну а так да, как отметил _Bers, основной плюс - быстрый поиск (тока примеры странные, зачем переводить текст по словам? xD).

Еще можешь почитать про мультимап, сет и мультисет (они тоже на самобаллансирующихся деревьях поиска построены).

Кстати, _Bers, МБ подскажешь как можно на плюсах организвать базу...ну примерно как в прологе, т.е. там я пишу:
Код:
fact(a,123).
fact(a, 456).
и по запросу fact(a, X) получу X = 132, X = 456;
а по запросу fact(X, 123) получу X = a.
И оно очень быстро работает, но ведь не map внутри, т.к. для первого запроса ключем должен быть char, а для второго int. Хранить 2 словаря для этой цели ведь совсем не хорошо,..
Вобщем, если коротко, как средствами С++ элегантно замутить что-то типа map<key1, key2> ?

Ну или вдруг в твоем примере потребуется не только англо-русский переводчик, но и русско-англиский?
rrrFer вне форума Ответить с цитированием
Старый 07.02.2013, 12:46   #65
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Кстати, _Bers, МБ подскажешь как можно на плюсах организвать базу...ну примерно как в прологе, т.е. там я пишу:
Код:
fact(a,123).
fact(a, 456).
и по запросу fact(a, X) получу X = 132, X = 456;
а по запросу fact(X, 123) получу X = a.
И оно очень быстро работает, но ведь не map внутри, т.к. для первого запроса ключем должен быть char, а для второго int. Хранить 2 словаря для этой цели ведь совсем не хорошо,..
Вобщем, если коротко, как средствами С++ элегантно замутить что-то типа map<key1, key2> ?

Ну или вдруг в твоем примере потребуется не только англо-русский переводчик, но и русско-англиский?
может написать своё бинарное дерево?
да, в примере _Bers нужен будет русско-английский и англо-русский переводчик, ведь ключ что есть в map, просто позволяет обраться к элементу, сам ключ не будет выводиться никак
_SOKOL_ вне форума Ответить с цитированием
Старый 07.02.2013, 14:28   #66
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
да, в примере _Bers нужен будет русско-английский и англо-русский переводчик, ведь ключ что есть в map, просто позволяет обраться к элементу, сам ключ не будет выводиться никак
это ерунда какая-то.
Цитата:
может написать своё бинарное дерево?
напиши, но это не поможет )
rrrFer вне форума Ответить с цитированием
Старый 07.02.2013, 14:40   #67
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
И оно очень быстро работает, но ведь не map внутри, т.к. для первого запроса ключем должен быть char, а для второго int. Хранить 2 словаря для этой цели ведь совсем не хорошо,..
Ищите по словам "унификация", "сопоставление с образцом". Там сильно свои алгоритмы.
Abstraction вне форума Ответить с цитированием
Старый 07.02.2013, 14:46   #68
_SOKOL_
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 44
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
это ерунда какая-то.
почему ерунда?
_SOKOL_ вне форума Ответить с цитированием
Старый 07.02.2013, 17:34   #69
iDima
Пользователь
 
Регистрация: 30.12.2012
Сообщений: 19
По умолчанию Java

После C++начните изучать Java. Он ориентирован на C++ и вам будет его изучить не составит особого труда.
iDima вне форума Ответить с цитированием
Старый 07.02.2013, 18:03   #70
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Сообщение от _SOKOL_ Посмотреть сообщение
почему ерунда?
Поясните что это значит: " ведь ключ что есть в map, просто позволяет обраться к элементу, сам ключ не будет выводиться никак"?
куда должен выводиться ключ и что значит "просто позволяет обращаться"?
Если я выбираю элемент по ключу, значит ключ у меня есть, что мне мешает его вывести? )

Да и элемент словаря - это std:air, у которого есть поля first (ключ) и second (значение).

Например:
Код:
#include <iostream>
#include <map>
int main() {
  std::map<int,float> m;
  m[1] = 1.1f;
  m[2] = 1.2f;
  m[4] = 1.3f;
  
  for (auto t : m) 
    std::cout << t.first << " " << t.second << std::endl;
  
  return 0;
}
Дак что Вы имели ввиду ?
--------
Цитата:
Ищите по словам "унификация", "сопоставление с образцом". Там сильно свои алгоритмы.
ну это понятно, вопрос был " как средствами С++ элегантно замутить...?"
ключевое слово выделил жирным.

Последний раз редактировалось rrrFer; 07.02.2013 в 18:09.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с чего начиНАТЬ С/С++!!!! dk118 Помощь студентам 0 05.12.2012 01:22
С чего начинать leonidsm Свободное общение 4 06.10.2012 19:37
Какой язык лучше всего выбрать после завершения изучения языка Паскаль. VektorAB Помощь студентам 4 09.07.2010 07:16
С чего начинать? Shadol Свободное общение 6 24.11.2009 11:46
С++ ЧЕГО НАЧИНАТЬ !!! geniy Общие вопросы C/C++ 12 03.09.2007 10:50