2012-06-03 34 views
-2

我有一个问题,我有一个map我想存储数据。我添加一对映射,但是当我尝试获取它 - 它的数据不存储。我的代码:C++地图不适合我

typedef std::map<unsigned long, int> SocketsTableType; 
SocketsTableType ClientTable; 

inline void AddClient(unsigned long id, int fd) 
{ 
    ClientTable.insert(std::pair<unsigned long, int>(id, fd)); 
} 

inline int GetDescriptorByClient(unsigned long id) 
{ 
    SocketsTableType::const_iterator it; 

    for (it = ClientTable.begin(); it != ClientTable.end(); ++it) 
    { 
     if (it->first == id) 
     { 
      return it->second; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
AddClient(223322, 12); 
int fd = GetDescriptorByClient(223322); 
if(fd >= 0) 
{ 
    // NEVER HERE 
} 

} 

我的代码出了什么问题?

谢谢!

+0

您的代码无效。根本没有函数addClient,那是如何编译的?或者..做到了? – 2012-06-03 20:55:32

+0

如果您将'addClient'的调用替换为'AddClient',则它适用于我。 –

+0

如果您确定在两个地方都使用了“AddClient”或“addClient”,则代码工作正常。但'std :: map'有一个'find'方法,这就是你应该使用的。这是更高效的方式。 – juanchopanza

回答

2

您的代码有错误。它甚至不会编译。没有任何功能addClient在任何地方声明。另外,您忘记了包含必要的头文件。那么,下面的程序就像一个魅力:

#include <map> 
#include <cstdio> 

typedef std::map<unsigned long, int> SocketsTableType; 

SocketsTableType ClientTable; 

inline void AddClient(unsigned long id, int fd) 
{ 
    ClientTable.insert(std::pair<unsigned long, int>(id, fd)); 
} 

inline int GetDescriptorByClient(unsigned long id) 
{ 
    SocketsTableType::const_iterator it; 

    for (it = ClientTable.begin(); it != ClientTable.end(); ++it) 
    { 
     if (it->first == id) 
     { 
      return it->second; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    AddClient(223322, 12); 
    int fd = GetDescriptorByClient(223322); 
    if(fd >= 0) 
    { 
     printf("Found it! FD=%d\n", fd); 
    } 
}