需要由多个变量来定位一个值,也就是说Key由多个变量组成
原先想用多维数组查找,但可能生成的多维数组比较大,就想用map
#pragma warning(disable:4786)
#include "stdafx.h"
#include <map>
using namespace std;
typedef struct _T
{
int a;
int b;
int c;
} T;
int main(int argc, char* argv)
{
T abc;
abc.a = 1;
abc.b = 2;
abc.c = 3;
typedef map<T, int> T2Int;
T2Int t;
t.insert(T2Int::value_type(abc, 100));
return 0;
}
在VC下编译出错,如何解决呢,有人知道吗?
---------------------------------------------------------------
A:
map的key要求是copyable和comparable,你的类型T不符合这个要求。
为它定义operator <,使它可以比较:
inline bool operator< (const T& Left, const T& Right)
{
return
(Left.a != Right.a) ? (Left.a < Right.a) :
(Left.b != Right.b) ? (Left.b < Right.b) :
(Left.c < Right.c);
}
另一种方法是写一个函数对象完成上面的比较操作,把它做为第三个模板参数
原先想用多维数组查找,但可能生成的多维数组比较大,就想用map
#pragma warning(disable:4786)
#include "stdafx.h"
#include <map>
using namespace std;
typedef struct _T
{
int a;
int b;
int c;
} T;
int main(int argc, char* argv)
{
T abc;
abc.a = 1;
abc.b = 2;
abc.c = 3;
typedef map<T, int> T2Int;
T2Int t;
t.insert(T2Int::value_type(abc, 100));
return 0;
}
在VC下编译出错,如何解决呢,有人知道吗?
---------------------------------------------------------------
A:
map的key要求是copyable和comparable,你的类型T不符合这个要求。
为它定义operator <,使它可以比较:
inline bool operator< (const T& Left, const T& Right)
{
return
(Left.a != Right.a) ? (Left.a < Right.a) :
(Left.b != Right.b) ? (Left.b < Right.b) :
(Left.c < Right.c);
}
另一种方法是写一个函数对象完成上面的比较操作,把它做为第三个模板参数