3332453:Ryan:77 Easy Street
3324532:Tom:1 Victory Lane
3326854:Gary:69 Sexual Ave
3304357:Susan:11 Straight Road
3343651:Frank:96 Backwards street
我想要做的是读取数字,然后是名称,然后是地址,并将它们存储到BST
中。检查完所有内容后,我认为我的插入工作正常。它正确地将Name和Address插入每个位置,但key1保持为0或-955472。以上数字均假设为7位数(电话号码)。以下是我认为我迄今为止最接近的尝试。我不是要求别人给我代码(尽管它会有所帮助),而是向我解释为什么我的实现不起作用,以及我如何改进它。谢谢。
ifstream dataFile;
dataFile.open ("/Users/revaes12/Desktop/BinarySearch/BinarySearch/phone.dat.rtf");
for (int counter = 0; counter < 5; counter++)
{
getline(dataFile, tmp, ':');
person[counter].key1 = atoi(tmp.c_str());
getline(dataFile, person[counter].name1,':');
getline(dataFile, person[counter].address1);
PNTree.insert(person[counter].key1, person[counter]);
}
dataFile.close();
insert
来电的原型是“template <class KeyType, class DataType> bool BST<KeyType, DataType>::insert (KeyType key, DataType data)
”。
另外,我知道atoi是C而不是C ++,但我也尝试过stringstream,但也失败了!请帮忙!
答案 0 :(得分:2)
尝试reverse-engineer your problem后,我认为PNTree.insert
是错误的。假设PNTree
是std::map<int, person_type>
,那么insert
方法不会采用这些类型的两个参数。三个插入件位于下方。
pair<iterator,bool> insert (const value_type& val);
iterator insert (iterator position, const value_type& val);
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
和value_type
是std::pair<int, person_type>
。我认为你想要第一个,插入节点,在这种情况下,最简单的事情是:
PNTree[person[counter].key1] = person[counter];
另请注意,其中一些“数字”无法转换为int
,它们只是变大。您必须使用long long
或std::string
来保留这些内容。
如果我要编写此代码,它看起来更像this。