1

我在将 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);

有什么方法可以为优先级队列的每个元素分配一个唯一的字符串?

4

2 回答 2

2

正如对问题的评论表明您可以包装char [100]int使用新类型(因为pair<>抽象性差)。另一种选择是使用std::string, std::vector<char>,std::array<char, 100>而不是 char[100]。

PS:调用atoi(&priority)可能会失败,因为atoi需要以空字符结尾的 C 字符串,而不是指向单个字符的指针。

于 2013-08-05T13:48:07.980 回答
0

你可以使用std::array<char,100>我猜的东西,但是你当前的向量类型需要一个动态分配的字符串。

你想强制你的向量的每个元素超过 100 个字节,不管字符串有多长?

于 2013-08-05T13:49:38.867 回答