我有一个问题,即按值将char数组传递给priority_queue
。我想将唯一值传递给构造函数,但我只能将优先级队列中的类型分配给char*
。这会导致问题,因为传递的值会更改算法中的每次迭代,然后会更改优先级队列中的所有值(因为每个元素都是指向任务的指针)。这是一个代码示例:
char task[100];
char priority;
pair<int, char*> temp;
priority_queue< int, vector<pair<int, char*>>, compare> queue;
printf("Define a priority and a task to be done (exit by pressing CTRL-D):\n\n");
do {
priority=getchar();
if(isdigit(priority)){
scanf("%s", task);
temp=make_pair(atoi(&priority), task); //I want to pass by value here not by reference, is there any solution to this?
queue.push(temp);
printf("%i %s\n", temp.first, temp.second);
}
} while(priority != EOF);
有没有办法可以为优先级队列的每个元素分配一个唯一的字符串?
答案 0 :(得分:2)
正如对问题的评论建议您可以将char [100]
和int
包装到新类型(因为pair<>
提供了不良的抽象)。
另一种选择是使用std::string
,std::vector<char>
,std::array<char, 100>
代替char [100]。
PS:对atoi(&priority)
的调用可能会失败,因为atoi
期望以空字符结尾的C字符串,而不是指向单个字符的指针。
答案 1 :(得分:0)
我猜你可以使用像std::array<char,100>
这样的东西,但你当前的矢量类型需要一个动态分配的字符串。
你想强制你的矢量的每个元素都超过100个字节,不管字符串多长吗?