我是C ++的新手,无法在类定义中正确定义地图。
这是我写的代码:
#include<stdio.h>
#include <iostream>
#include <map>
#include <utility> // make_pair
#include <string.h>
#include <sstream>
using namespace std;
class assgnt
{
private:
//typedef std::map<int, int> MapType;
//MapType my_map;
public:
bool isGoodPoint(int x, int y);
void addGoodNeighbours(int x, int y);
};
inline bool assgnt::isGoodPoint(int x, int y)
{
string xs, ys;
stringstream xout, yout;
int xsum=0, ysum=0;
xout<<x; yout<<y;
xs = xout.str();
ys = yout.str();
for each (char c in xs)
{
xsum = xsum + int(c);
}
for each (char c in ys)
{
ysum = ysum + int(c);
}
if (xsum+ysum <= 19)
return true;
else
return false;
}
inline void assgnt::addGoodNeighbours(int x, int y)
{
//if assgnt::isGoodPoint(x+1,y)
if(isGoodPoint(x+1,y))
{
}
/*if isGoodPoint(x+1,y) and [x+1,y] not in points: points.append([x+1,y])
if isGoodPoint(x-1,y) and [x-1,y] not in points: points.append([x-1,y])
if isGoodPoint(x,y+1) and [x,y+1] not in points: points.append([x,y+1])
if isGoodPoint(x,y-1) and [x,y-1] not in points: points.append([x,y-1])*/
}
int main()
{
typedef std::map<int, int> MapType;
MapType my_map;
// insert elements using insert function
my_map.insert(std::pair<int, int>(0, 0));
int i=0;
while true
{
//my_map.insert(std::pair<int, int>(2, 2));
//my_map.insert(std::pair<int, int>(3, 3));
//my_map.insert(MapType::value_type(4, 4)); // all standard containers provide this typedef
//my_map.insert(std::make_pair(5, 5)); // can also use the utility function make_pair
MapType::iterator iter = my_map.begin();
std::cout << "Size of my_map: " << my_map.size() << '\n';
std::cout << "Enter a key to search for: ";
int c;
std::cin >> c;
iter = my_map.find(c);
if (iter != my_map.end())
{
int num = iter->second;
if(num == 0)
std::cout << "Value is found: " << iter->second << '\n';
else
std::cout << "Value not found: ";
}
else
std::cout << "Key is not in my_map" << '\n';
// my_map.clear();
}
我希望定义map typedef std :: map MapType;在类定义中,以便我可以在所有内联函数和main()中使用它来创建它的对象。
请帮忙。
答案 0 :(得分:0)
我想你想在课外使用它?在公共部分定义它并且开心。从封装的角度来看,Typedef是绝对安全的,它们只是同义词。然后,您可以在main
中将其用作assgnt::MapType
。
答案 1 :(得分:0)
看起来你的编译问题不是你的地图,而是你的while语法:
-while true
+while(true)
{
+}
答案 2 :(得分:0)
要使代码正常工作,您需要解决一些问题:
这将为您提供工作代码,以便您可以尝试任何正在做的事情。我想这就是你的问题所在?你不能让它在课堂上工作吗?
您的代码中还有一些其他错误,但您应该能够解决这些错误;)
答案 3 :(得分:0)
您的while
循环包含错误:它应该是
while(true)
{
//...
}
Infinete循环是一个坏主意(你的程序不会终止) - 你没有编写任何条件语句,如
while(true)
{
//...
if(some_condition)
break;
}
您需要公开my_map
字段,以便可以从main
(以及其他程序)访问该字段。
最后实例化你的课程:
int main()
{
assgnt obj;
//...
// now write obj.my_map instead of just my_map
}