Home c++ Using std :: find_if for an array (STL)

Using std :: find_if for an array (STL)

Author

Date

Category

I need to process an array and find the index of an element whose value is less than a certain one (If there are several such elements, then find out the first occurrence).

I did something like this:

# include & lt; iostream & gt;
using namespace std;
int main ()
{
  int N; cin & gt; & gt; N;
  int A [N];
  int total [N];
  for (int i = 0; i & lt; N; i ++)
  {
    cin & gt; & gt; A [i];
    total [i] = -1;
  }
  for (int i = 0; i & lt; N; i ++)
  {
    for (int j = i; j & lt; N; j ++)
    {
      if (A [i] & gt; A [j])
      {
        total [i] = j;
        break;
      }
    }
  }
  for (int i = 0; i & lt; N; ++ i)
  {
    cout & lt; & lt; total [i] & lt; & lt; "";
  }
  return 0;
}

I have two questions:

  • How to make such an algorithm faster?
  • Is it possible to implement something like this with std :: find_if?
  • The task itself: http: // informatics. mccme.ru/moodle/mod/statements/view.php?chapterid=112736#1

    The program crashes on two tests and precisely because of the speed of execution.


    Answer 1, authority 100%

    It’s not clear why you need O (N ^ 2)? and in general what you do – you don’t have any definite value. If it is M , then enough

    int i = 0;
    for (; i & lt; N; ++ i) if (A [i] & lt; M) break;
    

    Everyone. If i is less than N – this is the desired index, if it is N – there is no such element.

    With find_if :

    int * res = find_if (A, A + N, [] (int a) {return a & lt; M ;});
    

    res indicates the element to search for. If res points outside of A – to A [N] – there is no such element.

    But – again! You have clearly formulated the problem incorrectly! And I answer strictly your question – find the index of an element whose value is less than a certain .

    P.S. Yeah, I looked at the original problem. In fact, instead of asking how it is more convenient to hammer in a nail, you asked how it is more convenient to hold the microscope when hammering in a nail … your method, and above the other method.

    Programmers, Start Your Engines!

    Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.

    Recent questions