Есть ли альтернатива Boost.Bimap в c ++ 11? - PullRequest
24 голосов
/ 13 апреля 2011

Есть ли в C ++ 0x полезная альтернатива бимапу Буста?

Я бы хотел избежать Boost, но полностью принять C ++ 11. Если необходимо, уменьшенная версия BIMAP Boost будет работать для меня (мне нужен постоянный BIMAP для переключения между перечислениями и соответствующими строками) на протяжении всей моей программы. Карта будет постоянной во время компиляции, поэтому, возможно, даже две поддерживаемые вручную карты не являются оптимальным решением.

Спасибо!

ОБНОВЛЕНИЕ: Я нашел это в Проекте Кода, но, кажется, проблема с лицензированием: http://www.codeproject.com/KB/stl/bimap.aspx?fid=12042&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=151#xx0xx

Я просто ищу чистое и простое решение (один заголовок / исходный файл или немного больше, поскольку в моем случае две зеркальные карты одинаково хороши).

Ответы [ 2 ]

40 голосов
/ 13 апреля 2011

Краткий ответ: нет.

Длинный ответ: Нет.


Следует отметить, что поддержка C ++ 1 4 для прозрачных компараторов устраняет необходимость в Boost.Bimap в 90% случаев * : когда вам необходимо отключить любое заданное свойство объекта (сохраненного или вычисленного), часто это простой, побитовый сравнимый уникальный идентификатор, свойственный / присутствующий в объекте в любом случае. С помощью прозрачных компараторов вы можете сравнить объект с любым возможным значением, различаемым только по типу, при условии, что указанное значение можно получить / вычислить из объекта, не изменяя его.

* предположение, а не статистика

11 голосов
/ 14 апреля 2011

Мне кажется, что большая часть работы над библиотеками Boost заставляет их работать с другими библиотеками / STL.

Если вам не нужна эта возможность, вы можете просто использовать класс с std::map<X*, Y*> и std::map<Y*, X*>.Затем используйте такие методы, как: add(X,Y), remove(X,Y), get_left(X) и get_right(Y).

Если вы хотите хранить копии, add(X,Y) может выделить память, а remove(X,Y)выделить.Кроме того, вы можете определить деструктор, который вызывает remove(X,Y) для остальных элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...