Tôi đang cố gắng tối ưu hóa một số phần của mã C++ mất nhiều thời gian (phần sau của mã mất khoảng 19 giây cho số lượng dữ liệu X và Tôi đang cố gắng hoàn thành toàn bộ quá trình trong vòng chưa đầy 5 giây cho cùng một lượng dữ liệu - dựa trên một số điểm chuẩn mà tôi có). Tôi có một chức năng "thêm" mà tôi đã viết và sao chép mã ở đây. Tôi sẽ cố gắng giải thích càng nhiều càng tốt mà tôi nghĩ là cần thiết để hiểu mã. Xin vui lòng cho tôi biết nếu tôi đã bỏ lỡ một cái gì đó.Tối ưu hóa mã C++ (sử dụng UnorderedMap và Vector)
Thêm hàm sau đây được gọi là X lần cho số lượng mục nhập dữ liệu X.
void HashTable::add(PointObject vector) // PointObject is a user-defined object
{
int combinedHash = hash(vector); // the function "hash" takes less than 1 second for X amount of data
// hashTableMap is an unordered_map<int, std::vector<PointObject>>
if (hashTableMap.count(combinedHash) == 0)
{
// if the hashmap does not contain the combinedHash key, then
// add the key and a new vector
std::vector<PointObject> pointVectorList;
pointVectorList.push_back(vector);
hashTableMap.insert(std::make_pair(combinedHash, pointVectorList));
}
else
{
// otherwise find the key and the corresponding vector of PointObjects and add the current PointObject to the existing vector
auto it = hashTableMap.find(combinedHash);
if (it != hashTableMap.end())
{
std::vector<PointObject> pointVectorList = it->second;
pointVectorList.push_back(vector);
it->second = pointVectorList;
}
}
}
PointObject là gì? Nó là một vector với 2, 3 hoặc 4 giá trị? Loại đó là gì? số nguyên hay thực? Đây có phải là một băm không gian? – Robinson
Tôi thấy bạn đang chuyển tiếp các đối tượng theo giá trị ở khắp mọi nơi. Mỗi khi bạn làm điều đó, một hoạt động sao chép sẽ xảy ra. Con trỏ và hiệu suất là bạn bè, sử dụng chúng. – Havenard
PointObject có 2 thuộc tính (int key và vector) –
ParthN