Я определил структуру ABC, содержащую идентификатор int, строку NAME, строку LAST_NAME;
Моя процедура такова: чтение строки из входного файла. Разберите каждую строку на имя и фамилию и вставьте в структуру ABC. Кроме того, идентификатор структуры задается номером строки ввода.
Затем вставьте структуру в векторный мастер-лист. Я также хэширую их в хэш-таблицу, определенную как вектор‹ вектор>, используя имя и фамилию в качестве ключевых слов. То есть,
Если мои данные:
Кот Гарфилд
Снупи Дог
Человек-Кот
Затем для ключевого слова cash хеширует вектор, содержащий Garfield Cat и Cat Man. Я снова вставляю структуры в хеш-таблицу, используя push_back.
Проблема в том, что когда я вызываю стабильную_сортировку в своем мастер-листе, по какой-то причине это влияет на мою хеш-таблицу. Я подумал, что это может происходить из-за того, что песни упорядочены по-разному, поэтому я попытался сделать копию мастер-листа и отсортировать его, и это все еще влияет на хеш-таблицу, хотя исходный мастер-лист не затрагивается.
Любые идеи, почему это может происходить?
РЕДАКТИРОВАТЬ - опубликован исходный код:
Вот главное
ifstream infile;
infile.open(argv[1]);
string line;
vector<file> masterlist;
vector< vector<node> > keywords(512);
hashtable uniquekeywords(keywords,512);
int id=0;
while (getline(infile,line)){
file entry;
if (!line.empty() && line.find_first_not_of(" \t\r\n")!=line.npos){
id++;
string first=beforebar(line,0);
string last=afterbar(line);
entry.first=first;
entry.last=last;
entry.id=id;
masterlist.push_back(entry);
int pos=line.find_first_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
while (pos!=(int)line.npos){
string keyword=getword(line,pos);
node bucket(keyword,id);
bucket.addentry(entry);
uniquekeywords.insert(bucket);
}
}
}
Вот фрагмент реализации вставки хеш-таблицы:
struct node{
string keyword;
vector<file> entries;
int origin;
void addentry(file entry);
node(string keyword, int origin);
};
void hashtable::insert(node bucket){
int key=hashfunction(bucket.keyword);
if (table[key].empty()){
table[key].push_back(bucket);
numelt++;
}
else{
vector<node>::iterator it;
it=table[key].begin();
while(it!=table[key].end()){
if (compare((*it).keyword,bucket.keyword)==0 && (*it).origin!=bucket.origin){
(*it).entries.insert((*it).entries.end(),bucket.entries.begin(),bucket.entries.end());
(*it).origin=bucket.origin;
return;
}
it++;
}
node bucketcopy(bucket.keyword,bucket.origin);
table[key].push_back(bucket);
numelt++;
return;
}
}
std::map
или чего-то вроде нестандартногоhash_map
илиboost::unordered_map
? - person Billy ONeal   schedule 02.04.2010stable_sort
. - person Potatoswatter   schedule 02.04.2010