[英]Dynamically inserting into a set
我想知道如何動態地將數據插入到集合中。 我有一個帶有不同點的文本文件,我需要動態插入到集合中,因為我不知道會有多少個項目。
sample.txt
Point [3 4]
Point [5 6]
main.cpp
set<Point> s_p2;
if (strData.find("Point") != string::npos) {
pos = strData.find("t");
strData = strData.substr(pos + 2, 4);
istringstream in(strData);
Point temp_p;
in >> temp_p;
s_p2.insert(temp_p);
}
s_p2
是設置的容器,並且以下代碼集一直循環到文件末尾。
Q1:如果我這樣做,我的集合將只有一項還是temp_p
?
問題2:如何在套組中打印出值?
。
ostream& operator<<(ostream &out, Point &p2) {
p2.setDistFrOrigin();
out << "[" << setw(4) << p2.getX() << setw(1) << "," << setw(4) << p2.getY() << "] " << setprecision(3) << p2.getScalarValue() << endl;
}
Q1:如果我這樣做,我的集合將只有一項或多項temp_p
那要看。 該集合將僅存儲唯一的Point
,因此,如果temp_p
都不同,則將全部存儲它們。 在A的“獨特性” Point
使用用於設置的排序比較函數來確定。 兩個元件A
和B
相等如果A
是不大於B
和B
不大於A
。
Q2我該如何打印套組中的值?
您應定義std::ostream& operator<<(std::ostream& os, const Point& p)
運算符,然后使用std::cout
。 例如:
std::ostream& operator<<(std::ostream& os, const Point& p)
{
return os << p.someMethod() << " " << p.someOtherMethod();
}
然后,
std::set<Point> pointSet = ....;
for (std::set<Point>::const_iterator it = pointSet.begin();
it!= pointSet.end();
++it)
{
std::cout << *it << "\n";
}
或者,在c ++ 11中
for (const auto& p : pointSet)
{
std::cout << p << "\n";
}
假設您所有的代碼都能正常工作:
Q1-您將在集合中獲得多個項目,因為每次創建新的temp_p時,代碼運行一次,然后在插入時將其復制到集合中
Q2-您可以使用迭代器遍歷 集合並打印其項目:
set<Point>::iterator mySetIterator;
for (mySetIterator = s_p2.begin(); mySetIterator != s_p2.end(); mySetIterator++)
{
//print mySetIterator, where mySetIterator is a pointer to the n-th value of your set
cout<<(*mySetIteartor);
}
Q1:如果我這樣做,我的集合將只有一項或多項
temp_p
由於您使用的是設置為存儲唯一鍵的容器,因此您將獲得每個點的唯一值。 如果您使用多重集,那么您將有多個值。
問題2如何打印出集中的值?
我同意juanchopanza寫的話。
順便說一句:通過查看您的代碼,似乎您閱讀的每個點,插入的值都是[3 4
等。這是您打算要做的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.