циклы — извлечение значений Int из карты и итерация их в двудольный граф Переполнение стека

Это довольно сложно для меня, надеюсь, не для других.

У меня есть набор 256 ключевые / значимые элементы на карте. Я получил данные на карту из текстового файла через ifstream, Теперь мне нужно взять пары ключ / значение с карты, и мне нужно использовать эти точки данных для создания Двудольный граф.

Что мне нужно сделать, так это перебрать каждый ключ и значение и поместить их в bpGraph в формате:

bool bpGraph[V][V] = { {0, 0, 0, 1, 0, ect.... 0}, //Key 1 Value 4
{0, 2, 0, 0, 0, ect.... 0}, // Key 2 Value 2
{0, 0},
{0, 0},
{0, 0},
{0, 0},
{0, 0}
};

По сути, я посмотрю карту и установлю все 256 значений в этом массиве 256×256, а также установлю правильное значение true, причем ключ будет горизонтальной строкой, а значение — вертикальной.

Это код, который у меня есть в настоящее время:

int main(){

ifstream myfile("H:\\School\\CSC-718\\paths.txt");
std::map<int, int> mymap;
pair<int,int> me;
char commas;
int a, b;
vector<int> v;

while (myfile >> a >> commas >> b){
mymap[a] = b;
}
mymap;

bool bpGraph[M][N] = {
//...
};

cout << "Maximum number networks "<< maxBPM(bpGraph);

return 0;
}

Вопрос:

Могу ли я получить несколько советов / предложений относительно реализации?

1

Решение

Вы можете повторить карту, используя итератор. Из итератора вы можете извлечь ключ и значение, используя элементы ‘first’ и ‘second’ соответственно. Затем вы можете поместить эти значения в свой массив.

Для следующего кода итерирует карту и печатает каждый ключ и соответствующее значение:

void MapExample(void)
{
std::map<int, int> mymap;

mymap[1] = 11;
mymap[2] = 22;
mymap[3] = 33;

for (std::map<int,int>::iterator it=mymap.begin();it!=mymap.end(); ++it)
{
std::cout << it->first << "->" << it->second << "\n";
}
}

Вышеуказанные принты

1-> 11

2-> 22

3-> 33

РЕДАКТИРОВАТЬ:
Я не уверен, правильно ли я понимаю, но если я это сделаю, вы захотите создать эквивалентное представление ваших данных, которое использует массив 256×256 вместо карты.

Итерируя карту, вы сделаете:

    for (std::map<int,int>::iterator it=mymap.begin();it!=mymap.end(); ++it)
{
int key = it->first;
int value = it->second;

bpGraph[key-1][value-1] = 1;  //the indexes to the array are zero based, so you need to subtract 1, if your keys and values belong to {1, ... ,256}
}

Обратите внимание, что вам нужно инициализировать все элементы массива на ноль. После выполнения цикла for V [i] [j] = 1, только если ключ (i + 1) связан со значением (j + 1).

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector