В чем разница в распределении памяти и эффективности между использованием структуры с двумя полями и парой?
В чем разница между использованием структуры с двумя полями и парой?
Ответы (6)
std::pair
предоставляет предварительно написанные конструкторы и операторы сравнения. Это также позволяет хранить их в контейнерах, таких как std::map, без необходимости писать, например, конструктор копирования или строгое слабое упорядочение через operator <
(такое, как требуется для std::map
). Если вы их не запишете, вы не сможете сделать ошибку (помните, как работает строгое слабое упорядочение?), поэтому надежнее просто использовать std::pair
.
pair
предоставляет ctor по умолчанию и ctor копии шаблона. Имеет смысл - таким образом, в каждом случае pair
позволяет вызывать его тогда и только тогда, когда это разрешено базовыми типами.
- person j_random_hacker; 10.02.2010
std::make_pair()
, что довольно удобно во многих случаях, особенно в связи с новым значением auto
.
- person sbi; 18.12.2012
std::pair
поставляется с рядом конструкторов и операторов.
struct
разрешает именованные поля (кроме first
и second
) и готов к расширению в любое время.
Предпочитайте struct
, когда можете. Это может потребовать некоторых накладных расходов, но определенно проще в обслуживании.
С точки зрения распределения памяти и эффективности нет никакой разницы, поскольку это именно то, чем является std::pair
.
Поскольку это не упомянуто выше, если вам нужны преимущества вашего собственного имени, но преимущества std::pair (или любых других объектов), вы можете использовать «using» (начиная с С++ 11). Вы можете установить это в своем пространстве имен или объявлении класса.
На самом деле, так начинаются многие мои занятия...
using myPair = pair<int,string>;
ср. справочник по C++. для получения дополнительной документации.
Никакой разницы с точки зрения распределения памяти или эффективности. Фактически, в реализации STL, которую я использую, пара определяется как struct pair
pair
делает с first
и second
), то он должен быть struct
.
- person Manuel; 10.02.2010
class
с first
и second
, объявленными в разделе public
. В соответствии с интерфейсом члены first
и second
должны быть открытыми; не указывает, должно ли это быть class
или struct
.
- person Thomas Matthews; 10.02.2010
struct X { ... };
и class X { public: ... };
нет никакой семантической разницы. (Например, в отличие от C#.)
- person j_random_hacker; 11.02.2010
Как указано в std::pair‹int, int› vs struct с двумя int структура, вероятно, будет немного быстрее, потому что инициализация не производится.