元素在向量中的位置

时间:2010-02-27 15:56:17

标签: c++ vector position

我在矢量类型中有几个从cin读取的元素,然后我对矢量进行了一些计算,并且它的元素顺序发生了变化。问题是我需要在计算后打印矢量元素的位置。我不知道如何解释这就是为什么我会给出一个例子:

10 1 100 1000

和10是第1个元素,1是第2个,100是第3个等。计算后,矢量变化为:

100 10 1 1000

所以我应该打印

3 1 2 4 

因为100是输入的第3个元素,10是第1个等等。

我尝试使用数组[1000](因为输入中没有大于1000的数字),但它不起作用,因为可能有多个具有相同值的数字,如:

10 10 10 100

,输出可以是1 2 3 42 3 1 43 1 2 4等。但在这里我需要输出1 2 3 4因为它是'最小'。

我尝试使用数组f[1001]f[10] = 1f[100] = 2f[1] = 3 - 如果输入中的数字是10 100 1。但是如果有多个数字具有相同的值,例如10 10 100,那么我的想法就不起作用了。请以任何可能的方式帮助我。

3 个答案:

答案 0 :(得分:3)

听起来你需要存储值和初始位置。您应该可以使用一组结构来执行此操作:

struct UserInput
{
    unsigned int initialPosition;
    int userInputValue;
};

int main()
{
    userInput theUserInput[100];
    // increment a counter, starting at 1, and place it in 
    // "initialPosition" in the struct as user input is read
}

我会把剩下的留给你......因为它毕竟是家庭作业:)祝你好运。

答案 1 :(得分:1)

  • 如果您知道它是什么,请使用关联数组。
  • 如果输入的数量有限,请使用线性搜索来确定索引。
  • 考虑使用log 10 (或strlen)将1,10,100,1000等转换为0,1,2,3等。

答案 2 :(得分:0)

根据您对此类示例的描述: 10(3)10(2)10(1)100(4)

我们要输出的是1 2 3 4,而不是3 2 1 4.

所以我认为您的要求不是直接打印初始位置。你必须使位置序列尽可能小。

以下是我的解决方案:

使用直接映射哈希表来存储指定元素的所有初始位置。对同一元素的所有初始位置进行排序。因此,如果您想要输出最小的位置序列,您只需要从头到尾读取该指定元素的初始位置。

详细的实施留待给您,因为它是一个家庭作业。