Это довольно сложно для меня, надеюсь, не для других.
У меня есть набор 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;
}
Могу ли я получить несколько советов / предложений относительно реализации?
Вы можете повторить карту, используя итератор. Из итератора вы можете извлечь ключ и значение, используя элементы ‘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).
Других решений пока нет …