Min Heap implementation [C++]
Here's my two cents:


Do not using namespace std;.  It causes serious problems and is considered bad practice.  See Why is using namespace std; considered bad practice?.
Consider wrapping your class in a header so that it can be reused.  Use an include guard.
MinHeap is a common name that may cause name clash.  Consider placing it in a namespace.
MinHeap only supports ints.  You can make MinHeap a template.
Right now MinHeap can only be default initialized to empty.  Consider adding a constructor to initialize the MinHeap with a list of values.
Your comments apply to the function, instead of the first line of the function body.  They should really go outside the function.

// this function foos the bar
void foo(int bar)
{
    ...
}

You use int for indexes.  This is not good because int may be too narrow &mdash; INT_MAX may be as small as 32767.  Use std::size_t instead.
All of your functions that return an index have the suffix _index, except get_min_child.  I would suggest renaming it to min_child_index to be consistent.
Don't write the whole branch on the same line.  This decreases readability.  Instead of

if (2*index + 2 &lt; heap.size()) return 2;
else if (2*index + 1 &lt; heap.size()) return 1;
else return 0;


Do

if (2*index + 2 &lt; heap.size())
    return 2;
else if (2*index + 1 &lt; heap.size())
    return 1;
else
    return 0;

In left_child_index and right_child_index, ind can be computed in the if statement.  (C++17)
You swap(heap[0], heap.back()) then immediately heap.pop_back().  You are not doing heap sort, you are popping the value.  Just heap[0] = heap.back().
Incidentally, the standard library offers a couple of heap operations, and also priority_queue.  Maybe you can use them to simplify your implementation.