ฉันใช้การเปรียบเทียบระหว่างเวอร์ชันที่กล่าวถึงข้างต้นมาระยะหนึ่งแล้ว:
function[0] = 42;
function.insert(std::map<int, int>::value_type(0, 42));
function.insert(std::pair<int, int>(0, 42));
function.insert(std::make_pair(0, 42));
ปรากฎว่าความแตกต่างของเวลาระหว่างรุ่นแทรกมีเพียงเล็กน้อย
#include <map>
#include <vector>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::posix_time;
class Widget {
public:
Widget() {
m_vec.resize(100);
for(unsigned long it = 0; it < 100;it++) {
m_vec[it] = 1.0;
}
}
Widget(double el) {
m_vec.resize(100);
for(unsigned long it = 0; it < 100;it++) {
m_vec[it] = el;
}
}
private:
std::vector<double> m_vec;
};
int main(int argc, char* argv[]) {
std::map<int,Widget> map_W;
ptime t1 = boost::posix_time::microsec_clock::local_time();
for(int it = 0; it < 10000;it++) {
map_W.insert(std::pair<int,Widget>(it,Widget(2.0)));
}
ptime t2 = boost::posix_time::microsec_clock::local_time();
time_duration diff = t2 - t1;
std::cout << diff.total_milliseconds() << std::endl;
std::map<int,Widget> map_W_2;
ptime t1_2 = boost::posix_time::microsec_clock::local_time();
for(int it = 0; it < 10000;it++) {
map_W_2.insert(std::make_pair(it,Widget(2.0)));
}
ptime t2_2 = boost::posix_time::microsec_clock::local_time();
time_duration diff_2 = t2_2 - t1_2;
std::cout << diff_2.total_milliseconds() << std::endl;
std::map<int,Widget> map_W_3;
ptime t1_3 = boost::posix_time::microsec_clock::local_time();
for(int it = 0; it < 10000;it++) {
map_W_3[it] = Widget(2.0);
}
ptime t2_3 = boost::posix_time::microsec_clock::local_time();
time_duration diff_3 = t2_3 - t1_3;
std::cout << diff_3.total_milliseconds() << std::endl;
std::map<int,Widget> map_W_0;
ptime t1_0 = boost::posix_time::microsec_clock::local_time();
for(int it = 0; it < 10000;it++) {
map_W_0.insert(std::map<int,Widget>::value_type(it,Widget(2.0)));
}
ptime t2_0 = boost::posix_time::microsec_clock::local_time();
time_duration diff_0 = t2_0 - t1_0;
std::cout << diff_0.total_milliseconds() << std::endl;
system("pause");
}
สิ่งนี้ให้ตามลำดับสำหรับเวอร์ชัน (ฉันรันไฟล์ 3 ครั้งดังนั้นความแตกต่างของเวลา 3 ครั้งติดต่อกันสำหรับแต่ละเวอร์ชัน):
map_W.insert(std::pair<int,Widget>(it,Widget(2.0)));
2198 มิลลิวินาที, 2078 มิลลิวินาที, 2072 มิลลิวินาที
map_W_2.insert(std::make_pair(it,Widget(2.0)));
2290 มิลลิวินาที, 2037 มิลลิวินาที, 2046 มิลลิวินาที
map_W_3[it] = Widget(2.0);
2592 มิลลิวินาที 2278 มิลลิวินาที 2296 มิลลิวินาที
map_W_0.insert(std::map<int,Widget>::value_type(it,Widget(2.0)));
2234 ms, 2031 ms, 2027 ms
ดังนั้นผลลัพธ์ระหว่างแทรกเวอร์ชันต่างๆจึงสามารถละเลยได้ (ไม่ได้ทำการทดสอบสมมติฐาน)!
map_W_3[it] = Widget(2.0);
รุ่นใช้เวลาประมาณ 10-15% มากขึ้นเช่นนี้เนื่องจากมีการเริ่มต้นด้วยการสร้างการเริ่มต้นสำหรับ Widget