I was wondering which was faster. So I made a test code and tested.
static int nCDCreated = 0;
static int nCDDestoryed = 0;
static int nCDCopied = 0;
class CD {
public:
CD() { ++nCDCreated; }
virtual ~CD() { ++nCDDestoryed; }
void operator = (const CD& src) {
i = src.i;
++nCDCopied;
}
int i;
};
int main(int argc, char* argv[])
{
std::map<int, std::string> tm;
std::map<int, CD> tma;
unsigned long long start;
const int repeat = 50000;
nCDCreated = 0;
nCDDestoryed = 0;
nCDCopied = 0;
start = GetTickCount64();
int i = repeat;
for (; i > 0; i--) {
CD testCD;
testCD.i = i;
tma.insert(std::pair<int, CD>(i, testCD));
}
printf("insert : con %d, dest %d copy %d, (%dms)\n", nCDCreated, nCDDestoryed, nCDCopied, GetTickCount64() - start);
nCDCreated = 0;
nCDDestoryed = 0;
nCDCopied = 0;
tma.clear();
start = GetTickCount64();
i = repeat;
for (; i > 0; i--) {
CD testCD;
testCD.i = i;
tma[i] = testCD;
}
printf("operator[] : con %d, dest %d copy %d, (%dms)\n", nCDCreated, nCDDestoryed, nCDCopied, GetTickCount64() - start);
}
In debug mode, insert function is a little faster than operator[].
insert : con 50000, dest 100000 copy 0, (1125ms)
operator[] : con 100000, dest 100000 copy 50000, (1406ms)
But in release mode, insert function is almost 14 times faster than operator[].
insert : con 50000, dest 100000 copy 0, (47ms)
operator[] : con 100000, dest 100000 copy 50000, (672ms)
As the test results, using insert function is better than operator[].
'Windows' 카테고리의 다른 글
| Obtaining the title of another application (0) | 2017.01.25 |
|---|---|
| [MFC] Directory Dialog (0) | 2016.08.24 |
| VC6 Static control double click 처리하기 (0) | 2016.06.22 |
| [MFC] Double buffering (0) | 2016.05.27 |
| [MFC] Draw Text (0) | 2016.05.27 |