#include<utility>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<vector>
#include<set>
#define M 100000
using namespace std;
int main() {
map<char, vector<pair<char,int> > > graph;
vector<pair<char,int> > vector1;
vector1.push_back(pair<char,int>('B',4));
graph['A'] = vector1;
map<char,int> citydistances;
citydistances['A'] = 0;
vector<pair<char,int> >::iterator edge;
for (map<char,int>::iterator i=citydistances.begin(); i!=citydistances.end(); ++i) {
vector<pair<char, int> > cities = graph[i->first];
for (vector<pair<char,int> >::iterator j=cities.begin(); j!=cities.end(); ++j) {
if (citydistances.find(j->first)==citydistances.end()) {
edge = j;
//point 1
cout<<edge->first<<endl;
}
}
}
//point 2
cout<<edge->first<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图尽可能地缩短我的代码,以便专注于行为意外的部分.我不明白为什么第edge->first
1点和第2点的值不同.edge->first
在第1点是'B'但是'\000'
在第2点.有人可以帮助我吗?
edge = j
(在第1点之前),同时j
是向量中的迭代器cities
.在第2点处,向量已被破坏,因此取消引用edge(edge->first
)会导致未定义的行为.
它将通过cities
引用来修复:
vector<pair<char, int> > &cities = graph[i->first];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
128 次 |
最近记录: |