Альтернативный способ хранения членов в структуре данных - PullRequest
4 голосов
/ 28 июля 2011

Мне нужно запомнить пары значений для n экземпляров. Я знаю одно решение: создание отдельного класса или структуры, объявление 2-членной переменной и размещение ее в списке или массиве.

Но есть ли другой эффективный способ сделать это в C ++ / VC ++ MFC?

Ответы [ 6 ]

2 голосов
/ 29 июля 2011

Если пары значений , упомянутые в вопросе, означают целочисленные значения, я думаю, вы можете использовать CArray из CPoint или CSize за счет читабельности кода.

Пример кода:

CArray<CPoint, CPoint> Array;
Array.Add(CPoint( 2, 3 ));
Array.Add(CPoint( 2, 4 ));
2 голосов
/ 28 июля 2011

Вы можете создать пару, используя std::pair<X,Y> или std::make_pair(T1, T2). Затем вы можете сохранить эти пары в структуре данных по вашему выбору, так как вы хотите изменить

std::vector<std::pair<X,Y> > or std::set<std::pair<X,Y> >
1 голос
/ 28 июля 2011

Вы можете использовать tr1 :: tuple .

Также описано в моей статье здесь .

0 голосов
/ 28 июля 2011

Если одно из значений является ключом для другого, вы можете использовать Dictionary или другую структуру данных типа карты.

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx (только .NET)

Как указал MSalters, MFC также имеет свой собственный тип карты, CMap.

Также проверьте std::map, если вы хотите использоватьчто-то похожее в коде без CLI или MFC.

0 голосов
/ 28 июля 2011

Вы могли бы сделать хуже, чем проверить Boost :: Tuple <>

Кортеж (или n-кортеж) - это набор элементов фиксированного размера. Пары, тройки, четверки и т. д. являются кортежами. На языке программирования кортеж - это объект данных, содержащий другие объекты в качестве элементов. Эти Элементы-объекты могут быть разных типов.

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

0 голосов
/ 28 июля 2011

Есть множество других способов сделать это, но это, вероятно, один из самых эффективных способов.Я могу придумать несколько действительно неэффективных способов сделать это.

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