Small Poker program rewrite
Naming problem or design issue.  The first thing check_hand() does is to re-order the data.  I'd expect check_hand() to not alter hand, base on its name - it is a check.  Alternatively  just re-name it sort_check_hand().   Yet later code make a copy in temp[].  Better to copy into temp[] and then sort temp[], leaving hand[] alone.

//enum poker_hands check_hand(vector *hand) {
//  sort_hand(hand);
enum poker_hands sort_check_hand(vector *hand) {
  sort_hand(hand);

Code to detect a straight is redundant in flush strait and normal straight calculate.  Need only one.
Group detection.  Some poke like games find the best hand out of 5 cards (usual) or more (like 7 in 7 card stud) or betting order based on incomplete hands (1 to 9) cards.  A hand assessment that does not depend on 5 cards is more useful.
Rating.  Returning info as what kind of full house (Jacks over fives) is useful info for many games.  This code only returns fullhouse, three_kind etc, yet only needs a little more code to report the hand details.
Minor: Code for understanding.  By decrementing the smaller group count, group[2] only reports the numbers of pairs, not the sum of numbers of pairs, triples and 4-of-a kind.

// original
for(int i = 0; i &lt; MAXHAND; ++i) {
  int rank = temp[i]-&gt;nType;  // Get each card's type
  rankcount[rank]++;      // Increment each rank index
  group[rankcount[rank]]++;   // increment each rank's count index
}

if ( group[3] &amp;&amp; group[2] &gt; 1 ) // Found 3 of a kind and found another pair
  return fullhouse;

// suggested revision
for(int i = 0; i &lt; MAXHAND; ++i) {
  int rank = temp[i]-&gt;nType;
  group[rankcount[rank]]--;   // add
  rankcount[rank]++;
  group[rankcount[rank]]++;
}

if (group[3] &gt; 0 &amp;&amp; group[2] &gt; 0) {
  return fullhouse;