kdo*_*dog 1 c++ containers stl comparison-operators
假设我struct Foo在C++中有一些POD ,我想将它放入一个有序的容器中set<Foo>.我不关心使用哪种排序,只关注它是否一致且快速.做这个的最好方式是什么?
更具体地说,我说我在64位机器上sizeof(long)==8.说课程是:
struct Foo{
long key; //8 bytes : 8 total
int fum; // 4 bytes : 12 total
short n; // 2 bytes : 14 total
short n[3]; //6 bytes : 20 total
char bar[5]; // 5 bytes : 25 total
char name[23]; //22 bytes : 47 total
char padding[1]; // 1 byte : 48 total
}
Run Code Online (Sandbox Code Playgroud)
该padding字段只是为了确保大小为8的倍数.
请注意,它sizeof(Foo)是48,因此其内容可以用6 unsigned long秒表示,这显然是进行比较的最佳方式,而不是遍历每个字段.
编译器可以自动为我执行此操作吗?还是我必须要么定义union一个字段unsigned long data[8],或投下Foo *到unsigned long *在我的operator<方法Foo?
请注意,如果没有填充字段,则必须生成5次unsigned long比较,然后比较a long,a short和char比较.整件事情有点乱.
这个问题必须一直出现,所以我猜有一些最佳/最好的方法来处理它.