例如
for (int i = 1; i < no_orders+1; i++){
sorting_array[i].index_order = i;
sorting_array[i].some_vaule = &order_data[i].some_value;
}
在这里,order_data
是包含所有客户数据的结构数组,该结构允许直接访问索引客户的变量数据。数组sorting_array
是根据order_data中的值排序的数组;因此,DATA_TO_SORT中的指针是为了避免复制工作,因为此函数被调用了数百万次(相同的索引,更改的值)。
实际问题出现在排序功能中。如果我不使用指针,而是使用实际值(int some_value,但包括复制工作量),则排序应按预期进行。
std::sort
将some_value定义为指针,几秒钟后终止,而整个程序没有任何反馈。实际的问题是为什么以及我可能会改变什么。
struct DATA_TO_SORT {
int index_order;
int *some_value;
};
bool compare_by_val( DATA_TO_SORT &a, DATA_TO_SORT &b) {
return *a.some_value > *b.some_value;
}
void sort_acc_release() {
std::sort(sorting_array.begin() + 1, sorting_array.end(), compare_by_val);
}
还尝试了一个相关主题中的以下内容,但是,除了几个类似的错误声明之外,还出现了所描述的错误声明。
std::sort(sorting_array.begin() + 1, sorting_array.end(), [&](size_t a, size_t b) {return *sorting_array[a].some_value > *sorting_array[b].some_value; });
:: operator()(::: size_t,:: size_t)const“:Konvertierung von Argument 1 von” DATA_TO_SORT“ in” :: size_t“ nichtmöglichAlgorithm ... \ Microsoft Visual Studio \ 2017 \社区\ vc \ tools \ msvc \ 14.12.25827 \ include \ xutility 1017
工作的最小示例。
#include <iostream>
#include <cstdlib> //rand
#include <algorithm> //swap etc
#include <array> //array
struct OTHER_DATA {
int other_data;
};
struct DATA_TO_SORT {
int index_order;
int *some_value;
};
bool compare_by_val(DATA_TO_SORT &a, DATA_TO_SORT &b) {
return *a.some_value > *b.some_value;
}
int main() {
const int max_no = 10;
std::array<OTHER_DATA, max_no> some_other_values;
std::array<DATA_TO_SORT, 10> sorting_array;
for (int i = 0; i < some_other_values.size(); i++)
{
some_other_values[i].other_data = i * 5;
sorting_array[i].index_order = i;
sorting_array[i].some_value = &some_other_values[i].other_data;
}
for (int i = 0; i < sorting_array.size(); i++)
{
std::cout << "\n" << sorting_array[i].index_order << "\t" << *sorting_array[i].some_value;
}
std::sort(sorting_array.begin(), sorting_array.end(), compare_by_val);
for (int i = 0; i < sorting_array.size(); i++)
{
std::cout << "\n" << sorting_array[i].index_order << "\t" << *sorting_array[i].some_value;
}
system("pause");
return 0;
}
提前感谢您提出的与问题相关且意图明确的答案!