|
|
|
Двунаправленный ассоциативный контейнер - нужен STL - аналог или вариант реализации.
|
|||
|---|---|---|---|
|
#18+
Нужен класс, хранящий ассоциации между элементами (вроде multimap, но "двусторонний" и с поддержкой уникальности): допустим, есть набор элементов A и элементов B (DWORD, int, без разницы). ОДному элементу/значению A "соответствуют" один или несколько элементов/значений B. И одному элементу/значению B соответствует один или несколько элементов/значений A. Можно, зная значения A получить все соответствующие ему значения B, и зная значение B получить ВСЕ соответствующие ему значения A. ОДнако! Каждая пара A-B уникальна и хранится в массиве один раз. Массив оптимизирован на быстрый поиск значений. Какой STL класс содержит эту функциональность? (по справке понял, что наиболее близок stdext::hash_multimap, но при добавлении пары не проверяет дублирование, хотя в документации сказано, что проверяет :)). Или как это можно воплотить? ПРедполагаемые "входные"/"рабочие" данные. число значений A порядка 1000..8000. число значений B порядка 1000..8000. число значений A != числу значений B количество пар равно max(число значений A, число значений B). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2006, 20:27 |
|
||
|
Двунаправленный ассоциативный контейнер - нужен STL - аналог или вариант реализации.
|
|||
|---|---|---|---|
|
#18+
Самому придется писать. В STL такого нет.. А hash_multimap это multimap но только не на красно-черно дереве, а на hash таблице Ну что-нибудь такое template<class T> struct ptr_first_less : public binary_function<T*, T*, bool> { result_type operator(const first_argument_type& x, const second_argument_type& y) const { return x->first < y->first; } }; template<class T> struct ptr_second_less : public binary_function<T*, T*, bool> { result_type operator(const first_argument_type& x, const second_argument_type& y) const { return x->second < y->second; } }; template <typename A,typename B> MyContainer { typedef pair<A, B> value_type; typedef value_type* value_type_ptr; set<value_type> buffer; multiset<value_type_ptr, ptr_first_less<value_type_ptr> > first_keys; multiset<value_type_ptr, ptr_second_less<value_type_ptr> > second_keys; ... }; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2006, 13:08 |
|
||
|
Двунаправленный ассоциативный контейнер - нужен STL - аналог или вариант реализации.
|
|||
|---|---|---|---|
|
#18+
blindedСамому придется писать. В STL такого нет.. А hash_multimap это multimap но только не на красно-черно дереве, а на hash таблице Ок. я понял :( Пока сделал тестовый класс на двойному multimap'е... :) просто нет времени загнаться по хорошему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2006, 17:40 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=335&tid=2030480]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 414ms |

| 0 / 0 |
