- 论坛徽章:
- 0
|
本帖最后由 xb_parasite 于 2011-01-17 23:16 编辑
大家好,我这里有个可能是很简单的问题。
nItem Ids coordinate(point/rectangle) type coordinate_rectangle bool1 bool2 int1
0 1232,465,67,8678 (13222,243245) AAA (2374,34)-(123,45345) true true 13125
-1 2348,567,76,878, (2374,34)-(123,45345) BBB (4,34)-(123,45345) false false 78908
-2 324,78,98,80 (2342,656)-(565,3445) CCC (4,34)-(13,45345) true true 65879
1 4059,345,234,24 (2342,656)-(565,345) DDD (2374,4)-(123,45345) false true 879
3 23434,564,76,83,54 (22,656)-(565,3445) AAA (23,34)-(123,45345) false true 67897
4 345,345,546,6,57 (2342,656)-(5635,45) CCC (24,34)-(123,45345) true true 677779
5 345,34,56,7,7,8 (42,656)-(565,3445) DDD (274,34)-(123,345) true true 376389
2 324,546,7,87,8 (12231432,345345) BBB (8374,34)-(123,9345) true true 876846
以下是我的数据样例:
nItem是唯一的。
以上的除nItem以往任何一栏都可能为空值。
数据量并不大,可能只有20行以内。
需要删除交换,移动操作。
我有时需要用type作为键值来取得所有同类型type的数据。
有时我需要只用nItem来取得数据.
有时我只需要取其中的coordinate和 coordinate-rectangle 列而不想要取其他。
有时我只需要取其中Ids列而不需要取其他。
有时我只想要bool1为true的数据。
请问我应该用什么样的容器来做比较好呢?
如果是vector的话,因为我的键值有负数会不适合。
如果我用map的话,因为数据量小感觉有点大才小用。而且用起来比较复杂。
我开始方案是把数据分成了三块:
struct TPOINT
{
int nItem;
int x;
int y;
}
struct TRECT{
int nItem;
int x1;
int y1;
int x2;
int y2;
}
struct TID
{
vector<int> ids;
]
map<int,TPOINT>
map<int,TRECT>
map<int,vector<int>>
..... .....
发现上面的方案特别复杂而且愚蠢!!
我发帖时想到另一个方案:
key=nItem+2;
SHAPE_T
{
int pointContained;
POINT p1;
POINT p2;
}
enum T_TYPE
{
AAA
BBB
CCC
DDD
}
struct DATA
{
int nItem;
vector<int> Ids;
SHAPE_T shape;
T_TYPE type;
SHAPE_T links_rect;
bool bool1;
bool bool2;
int int1;
]
vector<DATA> datas; (将数据用以key为下标的vector来表示)
但是,如果我这样做的话,该如何处理每项都有可能出现的空值呢? |
|