インスタンス化されたエラーが発生し続けました。どうにかして修正してみてください。SETを実装できないようです。ベクトルを使用してみましたが、等値演算子を適切に実装する方法がわかりませんし、失敗しました。
最初はベクトルを使用していましたが、x と y の値を一意に保ちながら使用するのは困難でした。つまり、データのテキスト ファイルを読み取ります。
Point1, [3, 10]
Point2, [10, 10]
したがって、ポイント 1 はポイント 2 とは異なるベクトルに移動し、データを個別に保存します。しかし、どういうわけか、テキスト ファイルには Point1、[3、10] の繰り返し値があります。別の同じレコードを挿入したくなく、それらを一意にしたい. だから私はセットを使ってみましたが、実際にはデータに挿入できませんでした。
エラーは次のとおりです。
メンバー関数 'bool std::les<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Point]': STL_TREE.h:980: 'std::pair::iterator からインスタンス化されました。 bool> std::_Rb_tree<_Key,.... STL_SET.h:307: 'std::pair, _Compare, typename _Alloc::rebind<_Key>::other>::const_interator, bool> std:: からインスタンス化set..... main.cpp:141: ここからインスタンス化されました stl_function.h:227: エラー: '_ x < _y'の 'operator<' に一致しません
Point.h
#ifndef POINT_H
#define POINT_H
#include <iostream>
#include <ostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <math.h>
#include <set>
#include <string.h>
#include <string>
#include <stdio.h>
using namespace std;
class Point
{
friend ostream& operator<<(ostream&, const Point&);
protected:
int x, y;
public:
//c'tor
Point(int xx, int yy);
//setters
void setX(int x1);
void setY(int y1);
//getters
int getX() const {return x;};
int getY() const {return y;};
};
Point::Point(int xx, int yy) : x(xx), y(yy)
{
}
void Point::setX(int x1)
{
x=x1;
}
void Point::setY(int y1)
{
y=y1;
}
#endif
メイン.cpp
#include "Point.h"
#include <iostream>
#include <ostream>
#include <fstream>
#include <sstream>
#include <set>
#include <math.h>
#include <set>
#include <string.h>
#include <string>
#include <stdio.h>
#include <map>
#include <algorithm>
#include <map>
using namespace std;
class Main
{
public:
void mainMenu();
void stringToUpper(string &s);
};
void stringToUpper(string &s)
{
for(unsigned int l=0; l < s.length(); l++)
{
s[l] = toupper(s[l]);
}
}
void Main::mainMenu()
{
cout<<"1) type filename and read data"<<endl;
cout<<"2) View data"<<endl;
cout<<"Q) Enter 'Q' to quit"<<endl<<endl;
}
int main()
{
Main main;
char menuChoice;
bool quit=false;
int count = 0;
set<Point> p;
while ( !quit)
{
main.mainMenu();
cout << "Please enter your choice : ";
cin>>menuChoice;
menuChoice = toupper(menuChoice);
switch(menuChoice)
{
case '1':
{
string line, name;
char filename[50];
int x,y;
cout << "Please enter filename : ";
cin >> filename;
ifstream myfile(filename);
if (myfile.is_open())
{
while ( myfile.good() )
{
getline(myfile, line);
{
for (unsigned int i = 0; i < line.size(); ++i)
{
if (line[i] == '[' || line[i] == ']' || line[i] == ',')
{
line[i] = ' ';
}
istringstream in(line);
in >> name >> x >> y;
}
if(name == "Point")
{
p.insert(Point(x,y)) }
}
count++;
}
myfile.close();
cout << count;
}
else cout<< "Unable to open file";
}
break;
case '2':
{
cout<<"view data"<<endl;
}
case 'Q':
cout<<"You have chosen to quit!"<<endl;
quit=true;
exit(0);
default:
cout<<"Invalid entry"<<endl<<endl;
break;
}
}
}