![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
AXELman4ever |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 22.9.2011 Пользователь №: 2902 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день!
Читаю книгу Скотта Мейерса "Эффективное использование STL". В начале одной из глав, разделяющих понятия блоковых и узловых контейнеров, была замечена фраза: "К узловым контейнерам так же относятся все стандартные ассоциативные контейнеры" Вопрос в следующем. По определению, узловой контейнер - это динамически выделенный фрагмент памяти, который содержит ровно один элемент. Объясните пожалуйста на пальцах, как контейнер map, "элемент" которого обладает двумя значениями (ключ-значение) может относится к типу узловых контейнеров? Исходя из выше сказанного, я так понимаю, что ключ и значение хранятся в двух отдельных рядом стоящих фрагментах памяти ![]() Расскажите кто знает. Заранее благодарен ![]() Прошу прощения, ненароком создалось 2 одинаковые темы. Кнопочку, чтобы закрыть или удалить дубль я не нашел. |
|
|
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
насколько я понял из препарирования исходников, узел std::map имеет элементы:
то бишь: указатель на "левую" ветку красно-чёрного дерева (её содержимое "меньше" правой ветки - по определению operator<() ) указатель на родительский узел указатель на "правую ветку" значение-пара _Myval (содержит данные first и second) (кроме корневого узла) цвет узла флаг корневого узла Сообщение отредактировал Алексей1153 - 29.9.2011, 7:17 |
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
содержит ровно один элемент там же ничего не сказано про структуру этого элемента. вообще, структура STL контейнеров считается непрозрачной и нельзя рассчитывать на какие-то догадки. в STL используются только методы контейнеров, а не прямые манипуляции с памятью. так как контейнеры выделяются динамически, нельзя использовать указатели на элементы контейнера, например, если в него производится запись. это может привести к испорченным указателям. Сообщение отредактировал Iron Bug - 28.9.2011, 21:57 |
|
|
AXELman4ever |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 22.9.2011 Пользователь №: 2902 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 4.5.2025, 22:02 |