簡體   English   中英

動態插入到集合中

[英]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使用用於設置的排序比較函數來確定。 兩個元件AB相等如果A是不大於BB不大於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM