В чем разница между использованием структуры с двумя полями и парой? - PullRequest
30 голосов
/ 10 февраля 2010

В чем разница в распределении памяти и эффективности между использованием структуры с двумя полями и парой?

Ответы [ 6 ]

22 голосов
/ 10 февраля 2010

std::pair предоставляет предварительно написанные конструкторы и операторы сравнения. Это также позволяет хранить их в контейнерах, таких как std :: map, без необходимости писать, например, конструктор копирования или строгое слабое упорядочение через operator < (например, как требуется std::map). Если вы их не напишите, вы не сможете ошибиться (помните, как работает строгий слабый порядок?), Поэтому более надежно использовать std::pair.

18 голосов
/ 11 февраля 2010

std::pair поставляется с несколькими конструкторами и операторами.

A struct разрешает именованные поля (кроме first и second) и готов к расширению в любое время.

Предпочитайте struct, когда можете. Это может быть связано с некоторыми накладными расходами, но определенно проще в обслуживании.

7 голосов
/ 10 февраля 2010

С точки зрения распределения памяти и эффективности, нет никакой разницы - поскольку именно это std::pair.

1 голос
/ 01 мая 2018

Поскольку это не упомянуто выше, если вы хотите использовать преимущества своего имени, но преимущества std :: pair (или любых других объектов), вы можете использовать «using» (начиная с c ++ 11 и далее) , Вы можете установить это в своем пространстве имен или объявлении класса.

На самом деле, именно так начинаются мои уроки ...

using myPair = pair<int,string>;

ср. C ++ ссылка. для получения дополнительной документации.

1 голос
/ 30 июля 2017

Как указано в std :: pair против структуры с двумя целыми числами , структура, вероятно, будет немного быстрее, поскольку инициализация не производится.

1 голос
/ 10 февраля 2010

Нет разницы с точки зрения распределения памяти или эффективности.Фактически, в реализации STL я использую пару, определенную как struct pair

...