在课堂上定义地图

时间:2012-03-18 18:48:51

标签: c++ data-structures coding-style map

我是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()中使用它来创建它的对象。

请帮忙。

4 个答案:

答案 0 :(得分:0)

我想你想在课外使用它?在公共部分定义它并且开心。从封装的角度来看,Typedef是绝对安全的,它们只是同义词。然后,您可以在main中将其用作assgnt::MapType

答案 1 :(得分:0)

看起来你的编译问题不是你的地图,而是你的while语法:

-while true
+while(true)
{

+}

答案 2 :(得分:0)

要使代码正常工作,您需要解决一些问题:

  1. 您的课程需要公共构造函数
  2. 将您的地图公开。
  3. 在课堂外使用地图时,请使用类型assgnt :: MapType
  4. 这将为您提供工作代码,以便您可以尝试任何正在做的事情。我想这就是你的问题所在?你不能让它在课堂上工作吗?

    您的代码中还有一些其他错误,但您应该能够解决这些错误;)

答案 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
}