вектор <pair <aStruct *, int>> невозможен? - PullRequest
1 голос
/ 06 июля 2011

Итак, я попытался создать вектор, элементы которого являются парами указателя структуры и целого числа, и я начинаю думать, что это может быть невозможно ..

Предположим, у меня есть следующая структура:

struct node{
  string str;
  int size;
  node *child[3];
  node(string str1):str(str1){ size = 0;}
};

и вектор:

vector< pair<node*,int> > nodvector;

Затем я попытался создать новый узел и поместить его в вектор, и, видимо, он не работает:

int main(){
   node* nod1 = new node("HELLO");
   node* nod2 = new node("WORLD");
   nodevector.push_back(pair<nod1,3>);
   delete nod1;
   delete nod2;
}

Компилятор лает на меня, говоря: nod1 не может появляться в константном выражении ошибка: неверный аргумент шаблона 1 ошибка: несоответствие типа / значения в аргументе 2 в списке параметров шаблона для структуры struct std :: pair

Это просто что-то невозможное? Что может быть альтернативным решением этого? Ваш вклад будет высоко ценится!

Ответы [ 6 ]

8 голосов
/ 06 июля 2011

Когда вы создаете новые пары, используйте make_pair.

Так что это работает: nodevector.push_back(make_pair(nod1, 3));

3 голосов
/ 06 июля 2011

nodevector.push_back (пара(кивок 1, 3));

1 голос
/ 06 июля 2011

Все приведенные выше ответы верны.

Ваш код пытается вставить "тип" в вектор. Вот почему компилятор злится :).

Вы делаете что-то вроде

int i = 10;
vector<int> v;
v.push_back(int);

Очевидно, вы хотите

v.push_back(i);

Надеюсь, это поможет.

1 голос
/ 06 июля 2011

Проблема в том, что вы используете nod1 и 3 в качестве параметров шаблона для сопряжения:

nodevector.push_back(pair<nod1,3>);

Вместо этого попробуйте:

nodevector.push_back(pair<node, int>(nod1,3));

Или еще лучше:

nodevector.push_back(make_pair(nod1,3));
0 голосов
/ 06 июля 2011

Попробуйте что-то вроде этого, вы путаете ваш шаблонный аргумент для класса начисления, с которым нужно работать.

vector< pair<node*,int> > nodvector;

node * nod1 = new node ("HELLO");узел * nod2 = новый узел ("МИР");nodvector.push_back (пара (nod1,4));удалить nod1;удалить nod2;}

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

Создать объект пары.Вы еще не создали это.

Как вы думаете, "пара" - правильный синтаксис?

Исправьте это.

...