0

セットに動的にデータを挿入する方法を知りたいです。さまざまなポイントのテキストファイルがあり、そこにいくつのアイテムがあるかわからないため、セットに動的に挿入する必要があります。

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:これを行うと、セットには1つのアイテムしかないのですか、それとも複数のアイテムがありtemp_pますか?

Q2:セットの横にある値を印刷するにはどうすればよいですか?

ostream& operator<<(ostream &out, Point &p2) {
    p2.setDistFrOrigin();
    out << "[" << setw(4) << p2.getX() << setw(1) << "," << setw(4) << p2.getY() << "]   " << setprecision(3) << p2.getScalarValue() << endl;
}
4

3 に答える 3

4

Q1:これを行うと、セットにはtemp_pのアイテムが1つだけまたは複数あります

場合によります。セットには一意のがのみ保存される Pointため、temp_p毎回異なる場合はすべて保存されます。aの「一意性」はPoint、セットの順序付けに使用される比較関数を使用して決定されます。2つの要素Aとは、以下の場合は等しく、以下のB場合Aは等しくなります。BBA

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";
}
于 2012-11-14T11:13:24.050 に答える
1

すべてのコードが機能すると仮定します。

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);
}
于 2012-11-14T11:17:38.563 に答える
-2

Q1:これを行うと、私のセットには1つのアイテムのみまたは複数のアイテムが含まれますtemp_p

一意のキーを格納するように定義されたセットコンテナを使用しているため、各ポイントの一意の値を取得します。マルチセットを使用している場合は、複数の値があります。

Q2セット内の値を印刷するにはどうすればよいですか?

私はjuanchopanzaが書いたことに同意します。

ところで:あなたのコードを見ると、あなたが読んだ各ポイント、挿入された値[3 4などがそうです。それはあなたが意図したことですか?

于 2012-11-14T11:41:44.980 に答える