Re[4]: Разместить в обратном порядке отображаемые значения s
От: Сыроежка  
Дата: 11.01.12 14:21
Оценка:
Здравствуйте, baily, Вы писали:

B>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, jazzer, Вы писали:


J>>>Здравствуйте, Сыроежка, Вы писали:


С>>>>Как проще выполнить реверсию значений элементов для заданного контейнера std::map? То есть ключи остаются на месте, а меняются в обратном порядке отображаемые значения.


J>>>Зачем?

J>>>Если затем, чтоб обходить в обратном порядке, то есть rbegin/rend.

С>>Я вас уверяю, что задачи, возникающие на практике. значительно разнообразнее, чем может представить ваша фантазия в данный момент!


B>Не нужно тащить в интерфейс библиотечного класса все функции, которые возникают на практике.


А на самом деле тут исходная позиция не в том, чтобы тащить все функции, которые возникают на практике, в иинтерфейс, а в том, что прерывается логическая последовательность использования стандартного алгоритма revrese. То есть он существукт, может применяться для контейнеров, а затем, бац!, обнаруживается, что имеется провал, и что этот алгоритм, который на самом деле имеет тот же самый семантический смысл, просто отсутствует!

Я считаю это серьезным упущением стандарта. То есть я с самого начала считал, что это недостаток стандарта, но думал, задавая вопрос, что можетт быть существует давно очень простой, а самое главное общепринятый метод, как выполнить этот алгоритм для std::map, а я просто этот банальный метод не знаю. И поэтому хотел проверить, существуетт ли такой метод, или нет. Оказалось, что на самом деле такого общепринятого и де-факто стандартного метода нет! То есть поступают различные предлоежния, как этот сделать, со многими из которых я не соогласен и сделал бы это по-другому. А это значит имеет место несогласовнность в реализации стандартного алгоритма. То есть имеет место серьезный пробел в согласованности использования алгоритма.
Меня можно встретить на www.cpp.forum24.ru
Re[8]: Разместить в обратном порядке отображаемые значения s
От: Сыроежка  
Дата: 11.01.12 14:29
Оценка: :)
Здравствуйте, Masterkent, Вы писали:

M>Сыроежка:


С>>Здесь вопрос не о включении абсолютно всего, так как стандартный алгоритм уже включен в библиотеку. То есть нужно лишь сделать так, чтобы std::map не остался не охваченным.


M>Ну, можно было бы ввести трансформирующие итераторы для работы с mapped values. Можешь написать в Спортлото сюда свои пожелания, и, быть может, их учтут в комитете по стандартизации (некоторые люди из комитета регулярно посещают данный ресурс).


С>>Впорос, как часто это надо, это чисто риторический вопрос.


M>Это существенный вопрос. Стандартная библиотека не резиновая, помещать туда всё подряд, как в Boost, не получится.


Здесь я с вами не соглашусь. Согласованность подхода значительно важнее понятия резиновости библиотеки. Для примера возьмем историю алгоритма copy_if, который, как известно, Страуструп в свое время выкинул из библиотеки. И что, это улучшило библиотеку? Нет коонечно! написать этот алгоритм самостоятельно достатоноч просто, но тем не менее это влекло к отсутствию общей семантики и согласованности библиотеки. А потому Страуструп признал свою ошибку, и copy_if, снова был включен в стандарт. На мой взгляд анналогичная ситуация имеет место и с reverse для std::map, но только ситуация еще хуже! так как 1) будет существовать многообразие реализаций этого алгоритма большее, чем оп сравнению с copy_if$ 2) появится многообразие названий этого алгоритма, так как если его назвать точно также, как reverse, то это буде т вводить в заблуждение, так как бдет путаница со стандартным алгоритмом.
Все эти вопросы были бы сняты, если функция reverese была бы членом класса.
Меня можно встретить на www.cpp.forum24.ru
Re[7]: Разместить в обратном порядке отображаемые значения s
От: jazzer Россия Skype: enerjazzer
Дата: 11.01.12 15:11
Оценка: 2 (2)
Здравствуйте, Сыроежка, Вы писали:

С>Так ч и не собираюсь придумывать реальную задачу. Реальные задачи существуют помимо вашей и меой фантазии. Вы не на то облращаете внимание! Не беспокойтесь, как я уже сказал, мир реальных задач значительно богаче вашей фантазии, что вам даже и не снилось, какие задачи могут встретиться на практике.

"Не пытайтесь это понять, понять это невозможно" (c)
Т.е. ты придумываешь сам себе развлечения, не имеющие отношения к реальности? Тоже дело

С>Я вам уже сказал, что ваш аргумент не состоятелен, так как согласно ему, вообще непонятно, зачем существует этот алгоритм, например, для векторов?

С>Вопрос состоит в другом, почему для контейнера map не применим и не существует алгоритм reverse. Ведь на самом деле не обязательно переставлять весь набор элементов. Может, например, потребоваться перестановканекоторого поддиапазона набора элементов и т.д.
Я тебе открою тайну — вектор, как и список, не поддерживает свою отсортированность. Т.е. ты отсортировал его, а после это можешь джелать все, что хочешь, в т.ч. сортированность нарушить. Поэтому и есть sort, reverse, random_shuffle и другие веселые алгоритмы, которые в принципе отсутствуют для контейнеров, поддерживающих свою отсортированность.
А мап и сет — это контейнеры, сохраняющие свою отсортированность при любых операциях, и эта отсортированность поддерживается компаратором, который ты изменить для данного объекта не можешь (что имеет смысл, в общем-то), учитывая, что ты можешь хранить итераторы внутрь контейнера, с соответствующими гарантиями. И любые манипуляции с порядком элементов за пределами компаратора нарушат главное свойство — отсортированность.

Так что твой reverse может иметь смысл исключительно в терминах смены компаратора, что запрещено — а это значит, что ты должен создать новый объект мапа/сета с новым компаратором, который будет работать наоборот, и перекинуть данные в него — тогда все будет как надо.

Еще вариант — использовать boost::multi_index: там можно извращаться как угодно.

Я ответил на твой вопрос?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[9]: Разместить в обратном порядке отображаемые значения s
От: jazzer Россия Skype: enerjazzer
Дата: 11.01.12 15:13
Оценка:
Здравствуйте, baily, Вы писали:

B>Э, нет, батенька. Теперь понятно происхождения вашей путаницы.


B>Тут имеется два параметра :

B>1) "Исходный номер" барышни, по сути ее числовой идентификатор
B>2) "Порядковый номер" барышни в туре

B>Для представления всех девушек можно использовать map с ключом равным "Исходный номер".

B>А вот для представления девушек в каждом туре надо использовать vector из их исходных номеров.
B>Положение в этом vector и будет текущим "Порядковым номером"

boost::multi_index.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: Разместить в обратном порядке отображаемые значения s
От: jazzer Россия Skype: enerjazzer
Дата: 11.01.12 15:17
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>А на самом деле тут исходная позиция не в том, чтобы тащить все функции, которые возникают на практике, в иинтерфейс, а в том, что прерывается логическая последовательность использования стандартного алгоритма revrese. То есть он существукт, может применяться для контейнеров, а затем, бац!, обнаруживается, что имеется провал, и что этот алгоритм, который на самом деле имеет тот же самый семантический смысл, просто отсутствует!


С>Я считаю это серьезным упущением стандарта.


Вот, понимаешь, прерывается логическая последовательность квадратного корня. Для 4 работает, для 3 — тоже, для 2 — работает, даже для 1 работает, и более того, даже для нуля! А затем, бац!, обнаруживается, что имеется провал и корень из -1 извлечь нельзя.

Я считаю это серьезным упущением теории действительных чисел.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: Разместить в обратном порядке отображаемые значения s
От: Сыроежка  
Дата: 11.01.12 15:18
Оценка: -3 :)
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Сыроежка, Вы писали:


С>>Так ч и не собираюсь придумывать реальную задачу. Реальные задачи существуют помимо вашей и меой фантазии. Вы не на то облращаете внимание! Не беспокойтесь, как я уже сказал, мир реальных задач значительно богаче вашей фантазии, что вам даже и не снилось, какие задачи могут встретиться на практике.

J>"Не пытайтесь это понять, понять это невозможно" (c)
J>Т.е. ты придумываешь сам себе развлечения, не имеющие отношения к реальности? Тоже дело

С>>Я вам уже сказал, что ваш аргумент не состоятелен, так как согласно ему, вообще непонятно, зачем существует этот алгоритм, например, для векторов?

С>>Вопрос состоит в другом, почему для контейнера map не применим и не существует алгоритм reverse. Ведь на самом деле не обязательно переставлять весь набор элементов. Может, например, потребоваться перестановканекоторого поддиапазона набора элементов и т.д.
J>Я тебе открою тайну — вектор, как и список, не поддерживает свою отсортированность. Т.е. ты отсортировал его, а после это можешь джелать все, что хочешь, в т.ч. сортированность нарушить. Поэтому и есть sort, reverse, random_shuffle и другие веселые алгоритмы, которые в принципе отсутствуют для контейнеров, поддерживающих свою отсортированность.
J>А мап и сет — это контейнеры, сохраняющие свою отсортированность при любых операциях, и эта отсортированность поддерживается компаратором, который ты изменить для данного объекта не можешь (что имеет смысл, в общем-то), учитывая, что ты можешь хранить итераторы внутрь контейнера, с соответствующими гарантиями. И любые манипуляции с порядком элементов за пределами компаратора нарушат главное свойство — отсортированность.

J>Так что твой reverse может иметь смысл исключительно в терминах смены компаратора, что запрещено — а это значит, что ты должен создать новый объект мапа/сета с новым компаратором, который будет работать наоборот, и перекинуть данные в него — тогда все будет как надо.


J>Еще вариант — использовать boost::multi_index: там можно извращаться как угодно.


J>Я ответил на твой вопрос?


Не просветите меня, с каких это пор список не поддерживает свою организацию хранения данных?! Как раз каждый контейнерсуществует самостоятельно именно из-за того, что поддерживает собственную организацию хранения данных.
Что касается всего остального, то это говорит, что вы не в состоянии мыслить концептуально. Вы относитеьс к тем людям, которые не в состоянии обощать, а постоянно решаете частные вопросы. Для программиста — это серьезный недостаток. Я вам советую исправлять его!
Меня можно встретить на www.cpp.forum24.ru
Re[6]: Разместить в обратном порядке отображаемые значения s
От: Сыроежка  
Дата: 11.01.12 15:22
Оценка: -1
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Сыроежка, Вы писали:


С>>А на самом деле тут исходная позиция не в том, чтобы тащить все функции, которые возникают на практике, в иинтерфейс, а в том, что прерывается логическая последовательность использования стандартного алгоритма revrese. То есть он существукт, может применяться для контейнеров, а затем, бац!, обнаруживается, что имеется провал, и что этот алгоритм, который на самом деле имеет тот же самый семантический смысл, просто отсутствует!


С>>Я считаю это серьезным упущением стандарта.


J>Вот, понимаешь, прерывается логическая последовательность квадратного корня. Для 4 работает, для 3 — тоже, для 2 — работает, даже для 1 работает, и более того, даже для нуля! А затем, бац!, обнаруживается, что имеется провал и корень из -1 извлечь нельзя.


J>Я считаю это серьезным упущением теории действительных чисел.


Спасибо за развлечение. но когда у меня будет желание посмотреть на кривляние обезьянки, я лучше схожу в зоопарк!
Меня можно встретить на www.cpp.forum24.ru
Re[9]: Разместить в обратном порядке отображаемые значения s
От: Masterkent  
Дата: 11.01.12 15:25
Оценка:
Сыроежка:

С>Для примера возьмем историю алгоритма copy_if


В комитете по стандартизации не хватает людских ресурсов для тщательной проверки правил. И copy_if тому наглядный пример: LWG DR 2039. Issues with std::reverse and std::copy_if.

С>На мой взгляд анналогичная ситуация имеет место и с reverse для std::map


Интересно, а чем алгоритм reverse такой особенный? Если вдруг захочется скопировать куда-то mapped значения, удовлетворяющие некоему условию, то ты тогда предложишь ещё copy_if в std::map добавить? По-моему, если тут что-то и добавлять, так это не reverse в map, а функции (или шаблоны функций) для получения итераторов, указывающих на mapped values. Использование такого добра выглядело бы либо так:

std::reverse(
    some_map.mapped_values_begin(),
    some_map.mapped_values_end());

std::copy_if(
    some_map.mapped_values_begin(),
    some_map.mapped_values_end(),
    std::back_inserter(some_vector),
    some_predicate);

либо так:

std::reverse(
    std::make_mapped_value_iterator(some_map.begin()),
    std::make_mapped_value_iterator(some_map.end()));

std::copy_if(
    std::make_mapped_value_iterator(some_map.begin()),
    std::make_mapped_value_iterator(some_map.end()),
    std::back_inserter(some_vector),
    some_predicate);
Re[8]: Разместить в обратном порядке отображаемые значения s
От: baily Россия  
Дата: 11.01.12 15:29
Оценка: 1 (1) +2
Здравствуйте, jazzer, Вы писали:

J>Еще вариант — использовать boost::multi_index: там можно извращаться как угодно.


J>Я ответил на твой вопрос?


Безнадежный случай. Бесполезно дальше объяснять.
Re[9]: Разместить в обратном порядке отображаемые значения s
От: jazzer Россия Skype: enerjazzer
Дата: 11.01.12 15:35
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Не просветите меня, с каких это пор список не поддерживает свою организацию хранения данных?! Как раз каждый контейнерсуществует самостоятельно именно из-за того, что поддерживает собственную организацию хранения данных.

Перечитай мое сообщение еще раз, там речь шла о поддержании отсортирвоанности, а не об организации хранения.

С>Что касается всего остального, то это говорит, что вы не в состоянии мыслить концептуально. Вы относитеьс к тем людям, которые не в состоянии обощать, а постоянно решаете частные вопросы. Для программиста — это серьезный недостаток. Я вам советую исправлять его!

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

А если серьезно, в чем смысл всей этой эскапады? Реклама ресурса клиппер-борда-ру? Или что?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[10]: Разместить в обратном порядке отображаемые значения
От: Сыроежка  
Дата: 11.01.12 15:36
Оценка:
Здравствуйте, Masterkent, Вы писали:

M>Сыроежка:


С>>Для примера возьмем историю алгоритма copy_if


M>В комитете по стандартизации не хватает людских ресурсов для тщательной проверки правил. И copy_if тому наглядный пример: LWG DR 2039. Issues with std::reverse and std::copy_if.


С>>На мой взгляд анналогичная ситуация имеет место и с reverse для std::map


M>Интересно, а чем алгоритм reverse такой особенный? Если вдруг захочется скопировать куда-то mapped значения, удовлетворяющие некоему условию, то ты тогда предложишь ещё copy_if в std::map добавить? По-моему, если тут что-то и добавлять, так это не reverse в map, а функции (или шаблоны функций) для получения итераторов, указывающих на mapped values. Использование такого добра выглядело бы либо так:


M>
std::reverse(
M>    some_map.mapped_values_begin(),
M>    some_map.mapped_values_end());

M>
std::copy_if(
M>    some_map.mapped_values_begin(),
M>    some_map.mapped_values_end(),
M>    std::back_inserter(some_vector),
M>    some_predicate);

M>либо так:

M>
std::reverse(
M>    std::make_mapped_value_iterator(some_map.begin()),
M>    std::make_mapped_value_iterator(some_map.end()));

M>
std::copy_if(
M>    std::make_mapped_value_iterator(some_map.begin()),
M>    std::make_mapped_value_iterator(some_map.end()),
M>    std::back_inserter(some_vector),
M>    some_predicate);


Дело в том, что алгоритм reverse сохраняет свое семантическое значение и для std::map. Что такое reverse? Это, фактически, обобщение swap для более, чем двух элементов.
Что касается copy_if, у него есть по крайней мере возможная альтернатива в виде transform с предикатом, с помощью которого можно создавать новые последовательности. У reverse даже близко нет какоой-то альтернативы, так как нужно получать сразу же два значения последовательности для обработки? одно — из начала последовательности, другое — из конца последовательнсоти. То есть нет такого алгоритма, который поставлял бы в предикат такую пару итераторов.
Меня можно встретить на www.cpp.forum24.ru
Re[7]: Разместить в обратном порядке отображаемые значения s
От: rus blood Россия  
Дата: 11.01.12 15:48
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Спасибо за развлечение. но когда у меня будет желание посмотреть на кривляние обезьянки, я лучше схожу в зоопарк!


Смотри пункт 5
Имею скафандр — готов путешествовать!
Re[10]: Разместить в обратном порядке отображаемые значения
От: Сыроежка  
Дата: 11.01.12 15:52
Оценка:
Здравствуйте, Masterkent, Вы писали:

M>Сыроежка:


С>>Для примера возьмем историю алгоритма copy_if


M>В комитете по стандартизации не хватает людских ресурсов для тщательной проверки правил. И copy_if тому наглядный пример: LWG DR 2039. Issues with std::reverse and std::copy_if.


С>>На мой взгляд анналогичная ситуация имеет место и с reverse для std::map


M>Интересно, а чем алгоритм reverse такой особенный? Если вдруг захочется скопировать куда-то mapped значения, удовлетворяющие некоему условию, то ты тогда предложишь ещё copy_if в std::map добавить? По-моему, если тут что-то и добавлять, так это не reverse в map, а функции (или шаблоны функций) для получения итераторов, указывающих на mapped values. Использование такого добра выглядело бы либо так:


M>
std::reverse(
M>    some_map.mapped_values_begin(),
M>    some_map.mapped_values_end());

M>
std::copy_if(
M>    some_map.mapped_values_begin(),
M>    some_map.mapped_values_end(),
M>    std::back_inserter(some_vector),
M>    some_predicate);

M>либо так:

M>
std::reverse(
M>    std::make_mapped_value_iterator(some_map.begin()),
M>    std::make_mapped_value_iterator(some_map.end()));

M>
std::copy_if(
M>    std::make_mapped_value_iterator(some_map.begin()),
M>    std::make_mapped_value_iterator(some_map.end()),
M>    std::back_inserter(some_vector),
M>    some_predicate);


Можно еще посмотреть с другой стороны. Фактически, к std::map можно относиться как к некоторой частной разновидности более общего подхода к контейнеру наравне с std::vector. То есть первая разновидность позволяет обращаться к элементам контейнера по ключу, вторая разновидность позволяет обращаться к элементам контейнера, когда клюом является индекс элемента. Ведь в принципе числа натурального ряда также моогут быть взяты в качестве ключа. Если мы создадим контейнер std::map с ключами 0, 1, 2, и т.д., то обращение к данным, хранимым в sttd::map, не будет отличаться от обращения к данным, хранимым в std::vector, То есть концептуально имеется один тип контейнера, у которого могут быть различные ключи в том числе и чсила натурального ряда. Но получается, что в одном частном случае, коогда ключами являются числа натурального ряда, мы можем применять функцию reverse к некоторому диапазону элементов контейнера, а во втором случае мы этого делать не можем. Происходит семантический разрыв и не согласованность интерфейса..
Меня можно встретить на www.cpp.forum24.ru
Re[8]: Разместить в обратном порядке отображаемые значения s
От: Сыроежка  
Дата: 11.01.12 15:59
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, Сыроежка, Вы писали:


С>>Спасибо за развлечение. но когда у меня будет желание посмотреть на кривляние обезьянки, я лучше схожу в зоопарк!


RB>Смотри пункт 5


Вы этот пункт покажите для автора предудыщего сообщения. Надо конструктивно обсуждать вопрос, а не заниматься поясничаньем. Иначе любую тему можно превратить в профонацию! Так что будьте объективны. Иначе как окликнется, так и аукнется!
Меня можно встретить на www.cpp.forum24.ru
Re[10]: Разместить в обратном порядке отображаемые значения
От: Сыроежка  
Дата: 11.01.12 16:11
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Сыроежка, Вы писали:


С>>Не просветите меня, с каких это пор список не поддерживает свою организацию хранения данных?! Как раз каждый контейнерсуществует самостоятельно именно из-за того, что поддерживает собственную организацию хранения данных.

J>Перечитай мое сообщение еще раз, там речь шла о поддержании отсортирвоанности, а не об организации хранения.

С>>Что касается всего остального, то это говорит, что вы не в состоянии мыслить концептуально. Вы относитеьс к тем людям, которые не в состоянии обощать, а постоянно решаете частные вопросы. Для программиста — это серьезный недостаток. Я вам советую исправлять его!

J>Вы относитесь к людям, которые не в состоянии прочитать внимательно то, что написано. Для программиста — это серьезный недостаток.

J>А если серьезно, в чем смысл всей этой эскапады? Реклама ресурса клиппер-борда-ру? Или что?


Вы просто не понимаете, что вектор можно рассматривать как отсортированный контейнер, ключом которого является индекс элемента! Создайте std::map с ключом, равным числам натурального ряда последовательно, например, от 0 до 99, и фактически, ваш контейнер будет представлять собой вектор! Только и всего! То есть можно концептуально рассматривать вектор, как некоторый частный случай std::map (раз вы не ведете речь о физической организации, а говорите лишь об отсортированности по ключу), в котором ключем является индекс элемента!
например, рассмотрите код, чтобы было вам понятно


std::vector<int> v( 10 );

v[0] = 5;
v[1] = 2;
...
v[9] = 7;


Фактически здест имеют место быть пары { ключ, значение }, где ключом является индекс элемента. Причем последовательность априори отсортирована по индексу элемента!
Меня можно встретить на www.cpp.forum24.ru
Re[11]: Разместить в обратном порядке отображаемые значения
От: rumit7  
Дата: 11.01.12 17:25
Оценка: +2
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, jazzer, Вы писали:


J>>А если серьезно, в чем смысл всей этой эскапады? Реклама ресурса клиппер-борда-ру? Или что?


С>Вы просто не понимаете, что вектор можно рассматривать как отсортированный контейнер, ключом которого является индекс элемента! Создайте std::map с ключом, равным числам натурального ряда последовательно, например, от 0 до 99, и фактически, ваш контейнер будет представлять собой вектор! Только и всего! То есть можно концептуально рассматривать вектор, как некоторый частный случай std::map (раз вы не ведете речь о физической организации, а говорите лишь об отсортированности по ключу), в котором ключем является индекс элемента!

С>например, рассмотрите код, чтобы было вам понятно

С>
С>std::vector<int> v( 10 );

С>v[0] = 5;
С>v[1] = 2;
С>...
С>v[9] = 7;
С>


С>Фактически здест имеют место быть пары { ключ, значение }, где ключом является индекс элемента. Причем последовательность априори отсортирована по индексу элемента!


Дорогой наш мыслитель концептуально! Ваша концептуальнейшая и обобщеннейшая теория имела бы смысл в том случае, если бы ключ и значение внутри std::map являлись бы взаимно независимыми сущностями, как например это происходит для вектора (это так, даже если смотреть на это обобщенно и концептуально, т.к. индекс никак не зависит от значения которое туда захотят засунуть!).

Например, если бы std::map создавался как-то так:

map<string,string> stаff["programmer","director","scrubwoman"] = {"Сыроежка","Stroustrup","Баба Зося"};


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

reverse(staff.begin(), staff.end());


Но std::map в том виде, в котором задумывался и был воплощен имеет все же другой смысл (цитата из wikipedia): "Ассоциативный массив (словарь) — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу". Обратите ваше внимание на тот факт, что слова ключ и значение используется вместе как единое целое, и обозначаются словом "пара". Т.е. предлагаемый Вами reverse должен переворачивать часть единого целого.

С>например, рассмотрите код, чтобы было вам понятно


// внимание код не компилируемый!!!
struct student{
    string sname;
    string name;
};

student all_students[] = {{"Петров","Петя"},{"Иванов","Ваня"},{"Егорушкин","Жора"},{"Ссылкин","Ссылка"}};

reverse(begin(all_students), end(all_students));

// после этого, по Вашей логике, нормальным результатом будет
// Петров Ссылка
// Иванов Жора
// Егорушкин Ваня
// Ссылкин Петя
Re[12]: Разместить в обратном порядке отображаемые значения
От: Сыроежка  
Дата: 11.01.12 19:37
Оценка: -2
Здравствуйте, rumit7, Вы писали:

R>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, jazzer, Вы писали:


J>>>А если серьезно, в чем смысл всей этой эскапады? Реклама ресурса клиппер-борда-ру? Или что?


С>>Вы просто не понимаете, что вектор можно рассматривать как отсортированный контейнер, ключом которого является индекс элемента! Создайте std::map с ключом, равным числам натурального ряда последовательно, например, от 0 до 99, и фактически, ваш контейнер будет представлять собой вектор! Только и всего! То есть можно концептуально рассматривать вектор, как некоторый частный случай std::map (раз вы не ведете речь о физической организации, а говорите лишь об отсортированности по ключу), в котором ключем является индекс элемента!

С>>например, рассмотрите код, чтобы было вам понятно

С>>
С>>std::vector<int> v( 10 );

С>>v[0] = 5;
С>>v[1] = 2;
С>>...
С>>v[9] = 7;
С>>


С>>Фактически здест имеют место быть пары { ключ, значение }, где ключом является индекс элемента. Причем последовательность априори отсортирована по индексу элемента!


R>Дорогой наш мыслитель концептуально! Ваша концептуальнейшая и обобщеннейшая теория имела бы смысл в том случае, если бы ключ и значение внутри std::map являлись бы взаимно независимыми сущностями, как например это происходит для вектора (это так, даже если смотреть на это обобщенно и концептуально, т.к. индекс никак не зависит от значения которое туда захотят засунуть!).


R>Например, если бы std::map создавался как-то так:


R>
R>map<string,string> stаff["programmer","director","scrubwoman"] = {"Сыроежка","Stroustrup","Баба Зося"}; 
R>


R>то я могу еще понять смысл операции reverse, т.к. индексы остаются независимой сущностью и не зависят от значения которое там хранится (программист все также будет первый, директор второй, а уборщица третьей).


R>
R>reverse(staff.begin(), staff.end());
R>


R>Но std::map в том виде, в котором задумывался и был воплощен имеет все же другой смысл (цитата из wikipedia): "Ассоциативный массив (словарь) — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу". Обратите ваше внимание на тот факт, что слова ключ и значение используется вместе как единое целое, и обозначаются словом "пара". Т.е. предлагаемый Вами reverse должен переворачивать часть единого целого.


С>>например, рассмотрите код, чтобы было вам понятно


R>
R>// внимание код не компилируемый!!!
R>struct student{
R>    string sname;
R>    string name;
R>};

R>student all_students[] = {{"Петров","Петя"},{"Иванов","Ваня"},{"Егорушкин","Жора"},{"Ссылкин","Ссылка"}};

R>reverse(begin(all_students), end(all_students));

R>// после этого, по Вашей логике, нормальным результатом будет
R>// Петров Ссылка
R>// Иванов Жора
R>// Егорушкин Ваня
R>// Ссылкин Петя
R>



А ключ и значение как раз и являются независимыми. То есть что это означает? что для ззаданнного ключа может быть в любое время указано совершенно другое значение!

Но в любом случае спасибо вам за участие. Я уже всю дискуссию подытожил в своем сообщении по адресу http://clipper.borda.ru/?1-6-0-00000022-000-0-0-1326309482
Почитайте, будет вам интересно. Я не думаю, что что-то принципиально новое вы сможете мне возразить. То есть я не вижу никаких серьезных контраргументов моей постановке вопроса.
Меня можно встретить на www.cpp.forum24.ru
Re[12]: Разместить в обратном порядке отображаемые значения
От: Сыроежка  
Дата: 11.01.12 19:44
Оценка: :))
Здравствуйте, rumit7, Вы писали:

R>Здравствуйте, Сыроежка, Вы писали:


С>>Здравствуйте, jazzer, Вы писали:


J>>>А если серьезно, в чем смысл всей этой эскапады? Реклама ресурса клиппер-борда-ру? Или что?


С>>Вы просто не понимаете, что вектор можно рассматривать как отсортированный контейнер, ключом которого является индекс элемента! Создайте std::map с ключом, равным числам натурального ряда последовательно, например, от 0 до 99, и фактически, ваш контейнер будет представлять собой вектор! Только и всего! То есть можно концептуально рассматривать вектор, как некоторый частный случай std::map (раз вы не ведете речь о физической организации, а говорите лишь об отсортированности по ключу), в котором ключем является индекс элемента!

С>>например, рассмотрите код, чтобы было вам понятно

С>>
С>>std::vector<int> v( 10 );

С>>v[0] = 5;
С>>v[1] = 2;
С>>...
С>>v[9] = 7;
С>>


С>>Фактически здест имеют место быть пары { ключ, значение }, где ключом является индекс элемента. Причем последовательность априори отсортирована по индексу элемента!


R>Дорогой наш мыслитель концептуально! Ваша концептуальнейшая и обобщеннейшая теория имела бы смысл в том случае, если бы ключ и значение внутри std::map являлись бы взаимно независимыми сущностями, как например это происходит для вектора (это так, даже если смотреть на это обобщенно и концептуально, т.к. индекс никак не зависит от значения которое туда захотят засунуть!).


R>Например, если бы std::map создавался как-то так:


R>
R>map<string,string> stаff["programmer","director","scrubwoman"] = {"Сыроежка","Stroustrup","Баба Зося"}; 
R>


R>то я могу еще понять смысл операции reverse, т.к. индексы остаются независимой сущностью и не зависят от значения которое там хранится (программист все также будет первый, директор второй, а уборщица третьей).


R>
R>reverse(staff.begin(), staff.end());
R>


R>Но std::map в том виде, в котором задумывался и был воплощен имеет все же другой смысл (цитата из wikipedia): "Ассоциативный массив (словарь) — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу". Обратите ваше внимание на тот факт, что слова ключ и значение используется вместе как единое целое, и обозначаются словом "пара". Т.е. предлагаемый Вами reverse должен переворачивать часть единого целого.


С>>например, рассмотрите код, чтобы было вам понятно


R>
R>// внимание код не компилируемый!!!
R>struct student{
R>    string sname;
R>    string name;
R>};

R>student all_students[] = {{"Петров","Петя"},{"Иванов","Ваня"},{"Егорушкин","Жора"},{"Ссылкин","Ссылка"}};

R>reverse(begin(all_students), end(all_students));

R>// после этого, по Вашей логике, нормальным результатом будет
R>// Петров Ссылка
R>// Иванов Жора
R>// Егорушкин Ваня
R>// Ссылкин Петя
R>


Что касается открытия темы, то я просто тхотел выяснить, действительно не существует общерпиятой простой замены std::reverse для контейнера std::map, или я просто не тзнаю такой замены. Так как одна голова хорошо, а две лучше. Я же не обязан знать все трюки программирования, которые используются.
Как оказалось в ходе дискусии, я оказался прав, то есть нет общепринятого метода размещения значений в std::map в обратном порядке.
Это серьезое упущение стандарта С++.
Меня можно встретить на www.cpp.forum24.ru
Re[3]: Разместить в обратном порядке отображаемые значения s
От: MasterZiv СССР  
Дата: 11.01.12 20:43
Оценка:
> MZ>Порядок хранения элементов в std::map не определён. Обратным порядком для
> MZ>неоределённого порядка будет также неопределённый порядок. Следовательно,
> MZ>тебе ПРОСТО НЕ НУЖНО НИЧЕГО ДЕЛАТЬ.
>
> Ты что-то путаешь. Порядок на множестве ключей определен и этот порядок для

Определён порядок на ключах. И порядок итерирования. Порядок хранения -- не
определён.
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Разместить в обратном порядке отображаемые значения s
От: MasterZiv СССР  
Дата: 11.01.12 20:47
Оценка:
> алгоритмы, которые не прикрутишь к другим ассоциативным контейнерам типа хеш-таблиц
> в частности, алгоритм ТС применим к std::map и не применим к хеш-таблицам,
> потому что там нет порядка ключей

Порядок ключей хеш-таблицы может быть и задан как-то.
Но это не отменяет сделанных выводов.
Posted via RSDN NNTP Server 2.1 beta
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.